已有question on SO about "possible multiple enumerations",但此問題更具體。即使「IsNullOrEmpty」檢查也給出了「IEnumerable可能的多次枚舉」警告
請考慮以下的方法,這需要一個IEnumerable<string>
作爲輸入,並針對它的每個元素執行一個給定的方法:
public static bool SomeMethod(IEnumerable<string> enumerable)
{
if (enumerable.IsNullOrEmpty())
{
// throw exception.
}
else
{
return (enumerable.All(SomeBooleanMethod));
}
}
在上面的代碼,IsNullOrEmpty
只是它運行
return (!ReferenceEquals(enumerable, null) || enumerable.Any());
問題是ReSharper警告我有關「IEnumerable可能的多個枚舉」,我真的不知道這是否真的可能是一個問題。
我明白警告的意思,但是如果您確實需要在無效或空白的情況下檢查並拋出異常,您可以在這種情況下真正做什麼?
爲什麼你要這個方法拋出,如果通過一個空序列? 「爲這個(空)序列的每個成員做些什麼」的語義是非常明顯的,不是嗎?另外,爲什麼使用'ReferenceEquals()'而不是'== null'有什麼特別的理由? – AakashM
它確實不是,但現在想象這是一個構造函數。如果我不能從空序列構造一個對象,我不應該拋出一個exceptio? – User
當然,如果你真的沒有什麼可以做的;但是*一般來說*我會說空序列應該和任何非空序列一樣好。例如,List <>'非常樂意從空序列構造。當然,我只是泛泛而談,你知道你的情況*的細節*。 – AakashM