Resharper: 可能对 IEnumerable 进行多次枚举

17 浏览
0 Comments

Resharper: 可能对 IEnumerable 进行多次枚举

我正在使用新的Resharper版本6。在我的代码中的几个地方,它划线并警告我可能会有IEnumerable的多重枚举。

我理解这是什么意思,并在适当的情况下采取了建议,但在某些情况下,我不确定这是否真的是一个大问题。

就像下面的代码:

var properties = Context.ObjectStateManager.GetObjectStateEntry(this).GetModifiedProperties();
if (properties.Contains("Property1") || properties.Contains("Property2") || properties.Contains("Property3")) {
    ...
}

它在第二行划线了每个properties的提及,并警告我多次枚举了这个IEnumerable。

如果我在第一行的末尾添加.ToList()(将propertiesIEnumerable转换为List),警告就会消失。

但是,如果我将其转换为List,那么它将首先枚举整个IEnumerable来构建List,然后根据需要枚举List来查找属性(即1次完整枚举和3次部分枚举)。而在我的原始代码中,它只进行了3次部分枚举。

我错了吗?这里最好的方法是什么?

0