繁体   English   中英

为什么显然由List <>的集合初始值设定项克隆对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM