Visual Studio在IEnumerable
上给出警告" warning : Possible multiple enumerations“。然后我将ToList()
添加到其中。但我开始怀疑为什么这是一种糟糕的做法。
那么为什么多次枚举是不好的呢?
发布于 2021-10-19 09:34:54
实际上,您在代码中对集合进行了两次循环,这就是为什么会收到ReSharper警告。
例如,在使用数据库调用返回的IEnumerable
时,这意味着要获取两次数据,这会减慢应用程序的速度&导致不必要的数据库加载。为什么要两次获取数据呢?
如果在内存中使用enumerable,则根据集合的大小,对集合进行多次枚举的开销也可能非常大。
使用.ToList()
可以解决错误,因为它通过将IEnumerable
转换为列表(也可以通过使用ToArray
将IEnumerable
转换为数组来强制执行此操作),在变量初始化点强制枚举。
IEnumerable
集合中的数据也可能在不同的枚举之间发生变化,因此最好在需要数据保持不变的地方强制进行枚举(每次循环时,枚举表中的项可能都不同)。
由JetBrains自己创建:Code Inspection: Possible multiple enumeration of IEnumerable
https://stackoverflow.com/questions/69628386
复制相似问题