我目前正在处理一个函数,其中传递了一个对象(自写类型Catalog
),并且不会在被调用的函数中进行Mutations /更改.这里有一个简单的例子.
public override bool Migrate(in Catalog fromCatalog)
{
fromCatalog.SupplierId = 1; //works, but why
}
我想要严格 destruct 这种行为和disallow mutating any properties个传递的对象.
我目前正在处理一个函数,其中传递了一个对象(自写类型Catalog
),并且不会在被调用的函数中进行Mutations /更改.这里有一个简单的例子.
public override bool Migrate(in Catalog fromCatalog)
{
fromCatalog.SupplierId = 1; //works, but why
}
我想要严格 destruct 这种行为和disallow mutating any properties个传递的对象.
因为in修饰符仅适用于变量(本例中的参数).它可以防止将参数值更改为引用不同的对象.
public bool Migrate(in Catalog fromCatalog)
{
/* Error CS8331 Cannot assign to variable 'fromCatalog'
or use it as the right hand side of a ref assignment
because it is a readonly variable */
fromCatalog = new Catalog();
fromCatalog.SupplierId = 1;
}
并创建对象的浅表副本,这样您就不会更改传递的对象中的任何内容(在类中)
example:个
public Catalog CreateACopy()
{
Catalog obj = (Catalog)this.MemberwiseClone();
// and other...
return obj;
}
utilization:
public class Program
{
private static void Main()
{
Catalog catalog = new Catalog();
new Program().Migrate(catalog.CreateACopy());
}
public bool Migrate(in Catalog fromCatalog)
{
fromCatalog.SupplierId = 1;
}
}