当使用LINQ扩展方法进行迭代时,Resharper的多个枚举警告未显示

时间:2015-08-17 12:27:15

标签: c# linq resharper ienumerable enumeration

我正在试图弄清楚为什么Resharper没有向我显示有关第一种方法的secondCollection用法可能的多次枚举的警告,同时在第二种方法中正确显示它。在使用循环迭代时,无法重新构建某种评估树吗?我只是好奇,看起来LINQ的处理方式不同。

private bool LinqMethod(IEnumerable<string> firstCollection, IEnumerable<string> secondCollection)
{
    return !firstCollection.Any(e => secondCollection.Any(c => c != e));
}

private bool LoopMethod(IEnumerable<string> firstCollection, IEnumerable<string> secondCollection)
{
    foreach (var elementA in firstCollection)
        foreach (var elementB in secondCollection)
            if (elementA != elementB)
                return false;

    return true;
}

修改

我已将R#更新为版本9.1.3 - 相同的行为。此外,如果我将内联第二次Any()电话,我会得到此信息,但仍未显示警告

return !firstCollection.Any(e =>
{
    bool any = false;
    foreach (var c in secondCollection)
    {
        if (c != e)
        {
            any = true;
            break;
        }
    }
    return any;
});

但是,如果我首先打开Any()电话,我会收到正确的警告:

bool any = false;
foreach (var e in firstCollection)
{
    if (secondCollection.Any(c => c != e))
    {
        any = true;
        break;
    }
}
return !any;

0 个答案:

没有答案