对于某些人来说,这可能是一个基本问题,但它影响了我设计程序的方式。
我有一个 A 类型的集合:
IEnumerable<A> myCollection;
我根据两个不同的标准过滤我的收藏:
IEnumerable<A> subCollection1 = myCollection.Where(x => x.Count > 10);
etc.
现在,我知道 .Where 表达式将返回 IEnumerable 的新实例,但新集合是否包含对“myCollection”引用的类型 A 实例的相同引用,还是创建了类型 A 的新副本?如果创建类型“A”的新实例,是否可以说“subCollection1”引用与“myCollection”引用相同的 A 实例?
编辑:添加进一步的说明。
我正在寻找一种方法,以便当我对“subCollection1”中的“A”实例进行更改时,它也会针对“myCollection”进行修改。
如果它们是类,则实例是相同的,但如果它们是结构/值类型,则复制。
int、byte 和 double 是值类型 http://msdn.microsoft.com/en-us/library/s1ax56ch.aspx,结构也是如此(比如System.Drawing.Point
和自定义结构)。
但是字符串,您自己的所有类,基本上是“其余的”,都是参考类型 http://msdn.microsoft.com/en-us/library/490f96s2.aspx.
注意:LINQ 使用与所有其他分配相同的规则。
对于对象:
Person p1 = new Person();
p1.Name = "Mr Jones";
Person p2 = p1;
p2.Name = "Mr Anderssen";
// Now p1.Name is also "Mr Anderssen"
对于结构:
Point p1 = new Point();
p1.x = 5;
Point p2 = p1;
p2.x = 10;
// p1.x is still 5
使用 LINQ 时也适用相同的规则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)