我最初設置我的參數類型爲ICollection,因爲我認爲我會遇到IEnumerable的多個枚舉問題。但是,Resharper建議我可以將參數類型轉換爲IEnumerable。最後我做一個測試,以雙重檢查,似乎很好地工作:這不會導致IEnumerable的多次枚舉?
private static void Main(string[] args)
{
var nums = GetNums();
MultipleEnumerations(nums);
Console.ReadLine();
}
private static void MultipleEnumerations(IEnumerable<int> nums)
{
var otherNums = new List<int> {1, 2, 3, 4, 5};
var filtered = otherNums.Where(num => nums.Contains(num));
foreach (var num in filtered)
{
Console.WriteLine(num);
}
}
private static IEnumerable<int> GetNums()
{
yield return 4;
yield return 2;
}
這怎麼不會導致IEnumerable的多個枚舉?
'otherNums'是一個列表。 – Brandon
你能解釋爲什麼你認爲它會導致多個枚舉? - 試用後,你是對的:沒有實現數組,你將要做多個枚舉。也許這只是R#無法很好檢測的場景。 –
爲了確定otherNums列表中的數字是否在nums IEnumerable中,它必須迭代nums中的所有元素。既然我們正在檢查otherNums中的每個int,我會認爲這將是多個枚舉。 – tmajest