2014-05-22 54 views
8

此代碼:錯誤的Resharper多枚舉警告?

IEnumerable<IEnumerable<int>> numbas = new[] {new[] {0, 1}, new[] {2}, new[] {3, 4, 5}}; 
var flattened = numbas.SelectMany(a => a); 

提取數從幾個來源單個扁平枚舉列表。 Resharper警告說,有可能a(第二個)被多次枚舉 - 但這很愚蠢;每個來源只被枚舉一次。是的,符號a將被枚舉多次,但每次都會有不同的來源。

我錯過了什麼,或者這是走出ReSharper的的錯誤警告?

回答

12

是的,這是一個錯誤的警告。你可以看到,如果你在SelectMany落實看看 - 只有一個枚舉嵌套元素:

foreach (TSource element in source) { 
    foreach (TResult subElement in selector(element)) { 
     yield return subElement; 
    } 
} 

下面是這個YouTrack問題:http://youtrack.jetbrains.com/issue/RSRP-413613