gpt4 book ai didi

c# - LINQ - Where 表达式是否返回新实例或对对象实例的引用

转载 作者:IT王子 更新时间:2023-10-29 04:03:23 24 4
gpt4 key购买 nike

这对某些人来说可能是一个基本问题,但它会影响我设计程序的方式。

我有一个类型 A 的集合:

IEnumerable<A> myCollection;

我根据 2 个不同的标准过滤我的收藏:

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 是value types ,以及结构(如 System.Drawing.Point 和自定义结构)。但是字符串,你自己的所有类,基本上是“其余的”,都是 reference types .

注意: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 时适用相同的规则。

关于c# - LINQ - Where 表达式是否返回新实例或对对象实例的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3584175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com