C# Linq表达式迭代器源
我有一个问题,关于C#中的C# Linq表达式迭代器源,c#,linq,lambda,C#,Linq,Lambda,我有一个问题,关于C#中的Where ListIterator是如何工作的。 示例:在本例中使用where select like时: var itemsNull = products.Where(p => p.ItemId == 0).Select(ell => ell.SKU); itemsnll的类型为WhereListIterator。 此类包含一个源属性。我想知道源代码是否包含产品列表的副本。如果简单地说,LINQ表达式在需要时才执行,因此,itemsnll仅包含对源属性
Where ListIterator
是如何工作的。
示例:在本例中使用where select like时:
var itemsNull = products.Where(p => p.ItemId == 0).Select(ell => ell.SKU);
itemsnll
的类型为WhereListIterator
。
此类包含一个源属性。我想知道源代码是否包含产品列表的副本。如果简单地说,LINQ表达式在需要时才执行,因此,
itemsnll
仅包含对源属性上表达式的引用,并将在通过foreach
或其他LINQ表达式迭代变量时执行
您可以通过在末尾添加
.ToList()
来强制表达式立即执行(因为ToList()
也会迭代IEnumerable)。如果简单地说,LINQ表达式在需要时才会执行,因此,itemsnll
仅包含对源属性上表达式的引用,并将在通过foreach
或其他LINQ表达式迭代变量时执行
您可以通过在末尾添加
.ToList()
来强制表达式立即执行(因为ToList()
也会迭代IEnumerable)。如果“复制”指的是深度复制,则否,所有linq操作符都不会对源枚举进行深度复制。相反,它只是一个引用。是的,我指的是一个深度拷贝,当你为第二个对象分配内存时。所以我的结论是不,不是。我发现这类问题的答案很有帮助。如果copy是指深度复制,那么不,没有一个linq操作符对源枚举进行深度复制。相反,它只是一个引用。是的,我指的是一个深度拷贝,当你为第二个对象分配内存时。所以我的结论是,不,它不是。我发现这类问题的答案很有帮助。