[英]Why are objects apparently cloned by collection initializer for List<>?>
在下面的代码中,当_propertyDetails
是正确实例化的对象时,为什么pdList[0]
null? 我的印象是,我要添加对pdList
的引用,该引用指向与_propertyDetails
相同的对象,因此在实例化此对象之后,两个引用都应该为非null吗?
PropertyDetailsModel _propertyDetails = null;
var pdList = new List<PropertyDetailsModel> { _propertyDetails };
_propertyDetails = PropertyDetailsModel.Read(PropertyId);
如果我缺少基本的东西,请原谅我。 我一直在努力将问题缩小到这个问题几个小时,而且我的大脑很累。
初始化列表时,不是_propertyDetails
进入列表,而是_propertyDetails
当前是对它的引用 (在此示例中为null
,但要点仍然存在)。 稍后使_propertyDetails
引用不同的东西不会改变列表中的内容。
(显然)它是一种引用类型,因此当您创建pdList
,该引用将被复制,但此时为null
。 稍后分配给_propertyDetails
不会更改pdList
已经存在的null
引用。
_propertyDetails
不是正确实例化的对象。 这根本不是一个对象。 它是一个指向什么都没有的引用,在C#中被称为null
。 要获取对象,您必须编写类似
PropertyDetailsModel _propertyDetails = new PropertyDetailsModel();
正如其他人所说的,您在变量及其值之间感到困惑。 您不需要使用列表来演示这一点-它等效于以下代码:
string foo = null;
string bar = foo;
foo = "Hello";
Console.WriteLine(bar); // Empty, as the value of bar is null
更改变量的值与更改变量引用的对象中的数据不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.