为什么每次访问变量时都会调用一个LINQ查询?
为什么每次访问变量时都会调用一个LINQ查询?
这个问题已经有答案了:
为什么下面的代码中会再次调用Square()
?我认为values
是被重新计算了,但是为什么?我们先前已经得到了values
,为什么会再次调用它?为什么编译器会发出\"可能多次枚举\"的警告?
static IEnumerable Square(IEnumerable a) { foreach(var r in a) { Console.WriteLine($"From Square {r * r}"); yield return r * r; } } class Wrap { private static int init = 0; public int Value { get { return ++init; } } } static void Main(string[] args) { var w = new Wrap(); var wraps = new Wrap[3]; for(int i=0; i<wraps.Length; i++) { wraps[i] = w; } var values = wraps.Select(x => x.Value); var results = Square(values); int sum = 0; int count = 0; foreach(var r in results) { count++; sum += r; } Console.WriteLine("Count {0}", count); Console.WriteLine("Sum {0}", sum); Console.WriteLine("Count {0}", results.Count()); Console.WriteLine("Sum {0}", results.Sum()); }
结果:
From Square 1 From Square 4 From Square 9 Count 3 Sum 14 From Square 16 From Square 25 From Square 36 Count 3 From Square 49 From Square 64 From Square 81 Sum 194
admin 更改状态以发布 2023年5月21日