use*_*250 69 c# resharper resharper-7.1
有时Resharper会警告:
可能的多个枚举IEnumerable
关于如何处理这个问题还有一个问题,ReSharper网站也在这里解释了一些事情.它有一些示例代码,告诉您这样做:
IEnumerable<string> names = GetNames().ToList();
Run Code Online (Sandbox Code Playgroud)
我的问题是关于这个特定的建议:这不会导致在2 for-each循环中两次枚举集合吗?
Cod*_*ter 167
GetNames()返回一个IEnumerable.因此,如果您存储该结果:
IEnumerable foo = GetNames();
Run Code Online (Sandbox Code Playgroud)
然后每次枚举时foo,GetNames()再次调用该方法(不是字面上,我找不到正确解释细节的链接,但请参阅IEnumerable.GetEnumerator()).
Resharper看到了这一点,并建议您将枚举结果存储GetNames()在局部变量中,例如通过在列表中实现它:
IEnumerable fooEnumerated = GetNames().ToList();
Run Code Online (Sandbox Code Playgroud)
GetNames()只要您参考,这将确保仅枚举一次结果fooEnumerated.
这很重要,因为您通常只想枚举一次,例如GetNames()执行(慢)数据库调用时.
因为您在列表中实现了结果,所以您枚举fooEnumerated两次并不重要; 你将两次迭代内存列表.
Rya*_*yan 11
我发现这是理解多个枚举的最佳和最简单的方法.
C#LINQ:IEnumerable可能的多次枚举
https://helloacm.com/c-linq-possible-multiple-enumeration-of-ienumerable-resharper/
小智 8
GetNames()没有被叫两次.IEnumerable.GetEnumerator()每次要枚举集合时都会调用实现foreach.如果在IEnumerable.GetEnumerator()一些昂贵的计算中,这可能是一个考虑的理由.
| 归档时间: |
|
| 查看次数: |
42801 次 |
| 最近记录: |