有一个 question on SO about "possible multiple enumerations"已经,但这个问题更具体。
请考虑以下方法,它需要一个 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 枚举”,我真的不知道这是否真的是个问题。
我理解警告的意思,但是如果你真的需要检查并在 null 或空的情况下抛出异常,你在这种情况下真的能做什么?
最佳答案
这意味着您(部分)迭代 IEnumerable 不止一次:首先在调用 Any()
时(至少需要初始化迭代以查看可枚举对象是否返回任何元素),第二次在 All
中(从头开始迭代)。
ReSharper 就此警告您的原因是枚举可枚举可能会导致副作用,并且无意中迭代两次可能会触发两次副作用,这可能是合意的,也可能不是合意的。
关于c# - 即使是 "IsNullOrEmpty"检查也会给出 "Possible multiple enumeration of IEnumerable"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244178/