为什么显然是通过List<>的集合初始化程序克隆对象?>

时间:2011-09-21 21:02:15

标签: c# .net

在下面的代码中,为什么pdList[0]为null而_propertyDetails是一个正确实例化的对象?我的印象是我添加了对pdList的引用,指向与_propertyDetails相同的对象,因此在实例化此对象后,两个引用都应该为非null?

PropertyDetailsModel _propertyDetails = null;
var pdList = new List<PropertyDetailsModel> { _propertyDetails };
_propertyDetails = PropertyDetailsModel.Read(PropertyId);

如果我遗漏了一些基本的东西,请原谅我;我一直在努力将我的问题缩小到这个问题几个小时,我的大脑已经累了。

4 个答案:

答案 0 :(得分:5)

初始化列表时,列表中的_propertyDetails不是_propertyDetails,而是 null当前对的引用({{1}在这个例子中,但重点仍然是)。让_propertyDetails稍后引用不同的东西不会改变列表中的内容。

答案 1 :(得分:4)

它(显然)是一种引用类型,因此当您创建pdList时,引用会被复制,但此时它是null。稍后分配到_propertyDetails不会更改null中已有的pdList引用。

答案 2 :(得分:2)

_propertyDetails不是正确实例化的对象。它根本不是一个对象。它是一个引用,指向C#中称为null的任何内容。要获得一个对象,您必须编写类似

的内容
PropertyDetailsModel _propertyDetails = new PropertyDetailsModel();

答案 3 :(得分:2)

正如其他人所说,你对变量及其价值感到困惑。您不需要使用列表来演示这一点 - 它等同于此代码:

string foo = null;
string bar = foo;
foo = "Hello";

Console.WriteLine(bar); // Empty, as the value of bar is null

更改变量的值与更改变量引用的对象中的数据不同。