这段代码:
IEnumerable<IEnumerable<int>> numbas = new[] {new[] {0, 1}, new[] {2}, new[] {3, 4, 5}};
var flattened = numbas.SelectMany(a => a);
从多个来源中提取单个扁平的可枚举数字列表。 Resharper 警告说
a
可能是(第二个)被多次枚举——但这很愚蠢;每个来源仅被枚举一次。是的,符号a
将被枚举多次,但每次都会有不同的来源。我是否遗漏了什么,或者这是 Resharper 发出的错误警告?
最佳答案
是的,这是一个错误的警告。你看一下SelectMany
的实现就可以了- 嵌套元素只有一种枚举:
foreach (TSource element in source) {
foreach (TResult subElement in selector(element)) {
yield return subElement;
}
}
这是 YouTrack 的问题:http://youtrack.jetbrains.com/issue/RSRP-413613
关于resharper - 错误的 Resharper 多次枚举警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23815468/