我正在试图弄清楚为什么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;