6
我想知道是否有什麼規則要告訴如果一部分LINQ代碼遭受雙重枚舉?如何判斷一個LINQ擴展方法是否遭受雙重枚舉?
例如,以下代碼可能是雙枚舉的告示符號是什麼?還有什麼其他跡象要注意?
public static bool MyIsIncreasingMonotonicallyBy<T, TResult>(this IEnumerable<T> list, Func<T, TResult> selector)
where TResult : IComparable<TResult>
{
return list.Zip(list.Skip(1), (a, b) => selector(a).CompareTo(selector(b)) <= 0).All(b => b);
}
可能是你訪問'list'和應用LINQ方法將其不止一次的事實。此外,ReSharper有一個很好的檢查,提醒你這一點。 – 2013-02-14 23:31:56
在這種情況下,您明確提到'list'兩次,並且'list'的兩個用法都會強制它被枚舉。但我完全不相信這是一個很好的解釋。 – hvd 2013-02-14 23:32:14
如果你問是否有任何與「雙枚舉」相關的一般行爲,我可以告訴你沒有。由於IEnumerable是一個接口,任何行爲都將高度依賴於IEnumerable的實現。 – Aron 2013-02-15 02:56:23