潜意识中知道这是IEnumerable的延迟特性造成的,但是硬要条条框框地从原理上解释还真发现自己不行,所以来问问高手们了,同时我想也可以作为一个较为典型的问题,供使用着LINQ的开发者注意一下
直接看题目吧:
首先有一个MyClass类,代码如下
public class MyClass
}
接着在Main函数中用两种方式返回一个MyClass的集合,分别是GetEnumerable和GetList
private static IEnumerable<MyClass> GetEnumerable()
}
两个方法唯一的区别就在于,一个用了AsEnumerable,一个用了ToList,这里的intArray是早选定义好的private statice int[] intArray = new int[] { 1, 2, 3 };
然后调用如下
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
相关资源
-
下载
2022-12-29
-
下载
2023-03-10
-
下载
2022-12-02