c# - 即使是 "IsNullOrEmpty"检查也会给出 "Possible multiple enumeration of IEnumerable"警告

标签 c# resharper ienumerable

有一个 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/

相关文章:

c# - 未找到 ReSharper 预处理器 IF 中的变量

c# - 仅打印出 IEnumerable 中的奇数元素?

C# 泛型 IEnumerable

c# - 如何使用 Process 类打开便签?

c# - 端口启用和禁用

visual-studio-2010 - ReSharper是否可以与Visual Studio 2010 SP1一起正常使用

visual-studio - 使用 ReSharper 突出显示所有出现的选定对象

c# - 两个可枚举之间的相等性

c# - 注册热键 Fn 修改器?

c# - 检查 Uppercase 函数是否有效