此代码:
IEnumerable<IEnumerable<int>> numbas = new[] {new[] {0, 1}, new[] {2}, new[] {3, 4, 5}};
var flattened = numbas.SelectMany(a => a);
从多个来源中提取单个扁平的可枚举数字列表。 Resharper警告说,a
(第二个)被多次枚举是可能的 - 但这很愚蠢;每个源只被枚举一次。是的,符号a
将被多次枚举,但每次都会有不同的来源。
我是否遗漏了一些东西,或者这是来自Resharper的错误警告?
答案 0 :(得分:12)
是的,这是一个错误的警告。你可以看看你是否看一下SelectMany
的实现 - 那里只有一个嵌套元素的枚举:
foreach (TSource element in source) {
foreach (TResult subElement in selector(element)) {
yield return subElement;
}
}
以下是YouTrack的问题:http://youtrack.jetbrains.com/issue/RSRP-413613