潜意识中知道这是IEnumerable的延迟特性造成的,但是硬要条条框框地从原理上解释还真发现自己不行,所以来问问高手们了,同时我想也可以作为一个较为典型的问题,供使用着LINQ的开发者注意一下
直接看题目吧:
首先有一个MyClass类,代码如下
使用LINQ遇到的问题,请高手解答下原理public class MyClass
}

接着在Main函数中用两种方式返回一个MyClass的集合,分别是GetEnumerable和GetList
使用LINQ遇到的问题,请高手解答下原理private static IEnumerable<MyClass> GetEnumerable()
}
两个方法唯一的区别就在于,一个用了AsEnumerable,一个用了ToList,这里的intArray是早选定义好的private statice int[] intArray = new int[] { 1, 2, 3 };

然后调用如下
使用LINQ遇到的问题,请高手解答下原理public static void Main(string[] args)
}
对于每一种情况,都先执行MethodA使内部的i加上1,然后执行MethodB输出i
对于第二种情况,输出的是预期的2, 3, 4
而对于第一种情况,很遗憾,输出的是1, 2, 3

根据单步调试的结果, 事实上返回AsEnumerable()时,那个Select(i => new MyClass(i))每次foreach都要执行

还请高手说下原理,谢谢~

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-11
  • 2022-12-23
  • 2021-11-24
  • 2021-10-31
  • 2021-05-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-29
  • 2021-06-30
  • 2021-11-10
  • 2021-05-12
  • 2021-11-19
相关资源
相似解决方案