小编gre*_*gor的帖子

延迟执行时linq c#中的奇怪行为

嗨,我有以下代码,产生一种奇怪的行为.由linq到Objects生成的IEnumerable中包含的对象实例的属性不会在后续的foreach语句中更新.foreach语句应该枚举IEnumerable.相反,解决方案是先将其枚举.

虽然我找到了解决方案,但我没有在书籍或文章中的任何地方看到这些,并处理类似的例子.也许对linq有错综复杂知识的人可以解释它.

我花了一天的时间来确定错误的确切原因,并且在大型应用程序中调试并不容易.然后我在一个更简单的环境中复制它,如下所示.

public class MyClass
{
    public int val ;
 }

public class MyClassExtrax
{
    public MyClass v1 { get; set; }
    public int prop1 { get; set; }
}

void  Main() 
{
 List <MyClass> list1 = new List<MyClass>(); 
 MyClass obj1 = new MyClass(); obj1.val = 10; 
 list1.Add(obj1); 
 MyClass obj2 = new MyClass(); 
 obj2.val = 10; 
 list1.Add(obj2);

IEnumerable<MyClassExtrax> query1 =
     from v in list1
     where v.val >= 0
     select new MyClassExtrax{ v1=v ,  prop1=0 } ;

 //query1=query1.ToList(); solves the …
Run Code Online (Sandbox Code Playgroud)

c# linq deferred

6
推荐指数
1
解决办法
189
查看次数

标签 统计

c# ×1

deferred ×1

linq ×1