gpt4 book ai didi

c# - Resharper:IEnumerable 的可能多重枚举

转载 作者:IT王子 更新时间:2023-10-29 04:01:22 25 4
gpt4 key购买 nike

我正在使用新的 Resharper 版本 6。在我的代码中的几个地方,它对一些文本加了下划线,并警告我可能存在 可能的 IEnumerable 多重枚举

我理解这意味着什么,并在适当的时候采纳了建议,但在某些情况下,我不确定这是否真的很重要。

如以下代码:

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

它在每次提到 properties 时都会下划线在第二行,警告我正在多次枚举此 IEnumerable。

如果我添加 .ToList()到第 1 行的末尾(将 propertiesIEnumerable<string> 变为 List<string> ),警告消失。

但是可以肯定的是,如果我将它转换为一个列表,那么它首先会枚举整个 IEnumerable 以构建列表,然后根据需要枚举列表以查找属性(即 1 个完整枚举,以及3 部分枚举)。而在我的原始代码中,它仅执行 3 个部分枚举。

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

最佳答案

我不知道您的 properties 到底是什么 - 但如果它本质上代表一个未具体化的数据库查询,那么您的 if 语句将执行三个查询。

怀疑这样做会更好:

string[] propertiesToFind = { "Property1", "Property2", "Property3" };
if (properties.Any(x => propertiesToFind.Contains(x))
{
...
}

这将逻辑上只迭代序列一次 - 如果涉及数据库查询,它很可能只使用 SQL“IN”子句在数据库中完成所有操作单个查询。

关于c# - Resharper:IEnumerable 的可能多重枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com