我一直认为这两种方法是相似的:
public static IEnumerable<Func<int>> GetFunctions() { for(int i = 1; i <= 10; i++) yield return new Func<int>(() => i); } public static IEnumerable<Func<int>> GetFunctionsLinq() { return Enumerable.Range(1,10).Select(i => new Func<int>(() => i)); }
然而,当它们转换为List< Func< int>>时,它们产生不同的结果:
List<Func<int>> yieldList = GetFunctions().ToList(); List<Func<int>> linqList = GetFunctionsLinq().ToList(); foreach(var func in yieldList) Console.WriteLine("[YIELD] {0}",func()); Console.WriteLine("=================="); foreach(var func in linqList) Console.WriteLine("[LINQ] {0}",func());
输出是:
[YIELD] 11 [YIELD] 11 [YIELD] 11 [YIELD] 11 [YIELD] 11 [YIELD] 11 [YIELD] 11 [YIELD] 11 [YIELD] 11 [YIELD] 11 ================== [LINQ] 1 [LINQ] 2 [LINQ] 3 [LINQ] 4 [LINQ] 5 [LINQ] 6 [LINQ] 7 [LINQ] 8 [LINQ] 9 [LINQ] 10
为什么是这样?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。