创建一个新的对象相等

时间:2013-12-03 13:54:36

标签: c#

我不记得用于此的术语:

我有一个班级:

public class Region
{
    public int? id { get; set; }
    public string name { get; set; }
}

当我这样做时:

Region a = new Region();
Region b = new Region();
b=a;
b.id = 1;

a.id值发生变化 - 我该如何防止这种情况发生?那是什么意思呢?

3 个答案:

答案 0 :(得分:4)

Region是引用类型,而不是值类型,因此当您执行

b = a;

您正在将引用a复制到引用b,因此a和b指向相同的数据。

如果您不希望这样,请将Region设为struct(这是一种值类型,但这意味着当您将其用作参数或在何时将其复制到整个地方您将其分配给变量),或实现生成副本的Clone()方法:

public Region Clone()
{
    var result = new Region();
    result.Id = this.Id;
    result.Name = this.Name;
    return result;
}

答案 1 :(得分:0)

深度复制值类型属性:

Region a = new Region();
Region b = new Region();
b = new Region { id = a.id, name = a.name };
b.id = 1;

答案 2 :(得分:0)

a.id的值发生了变化,因为b引用了a。您可以从a手动设置属性的值,也可以使用Value Injecter

Here's an example using Value Injecter. 当您拥有大量属性时非常有用。

Region a = new Region();
Region b = new Region();
b.InjectFrom(a);
b.id = 1;