我正在使用新的Resharper版本6。 我的代码中的一些地方已经被下划线标记,并警告我可能会有一个可能的IEnumerable多个枚举。
我理解这意味着什么,并在适当的情况下采纳了建议,但是在某些情况下,我不确定它是否真的很重要。
就像下面的代码:
var properties = Context.ObjectStateManager.GetObjectStateEntry(this).GetModifiedProperties();
if (properties.Contains("Property1") || properties.Contains("Property2") || properties.Contains("Property3")) {
...
}
在第二行中,它会用下划线标出每个properties
的提及,并警告我正在多次枚举此IEnumerable
。
如果我在第一行末尾添加.ToList()
(将properties
从IEnumerable<string>
转换为List<string>
),则警告消失了。
但是,如果我将其转换为列表,则首先需要枚举整个IEnumerable
以构建列表,然后根据需要枚举列表来查找属性(即完全枚举一次和3次部分枚举)。而在我的原始代码中,它只执行3次部分枚举。
我错了吗?这里最好的方法是什么?
propertiesToFind
上执行Contains操作,而不是properties
。 - seheContains
的调用,因此它每个元素只会调用一次Contains
... 但是这是在数组上调用Contains
。如果计算序列需要时间(例如,它正在查看一个更大的序列并进行过滤),那么这将更有效率。 - Jon Skeet