Ted*_*erg 5 c# clr cil compiler-optimization
假设我有这样的代码:
if (someEnumerable.Count() < 2) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
这是否会导致someEnumerable完全迭代,或者如果Count()到达可枚举中的第二项,评估是否会完成?
对于方法的行为没有编译器优化。如果有的话,这将是方法本身的运行时优化。但由于Enumerable.Count不知道它在哪个上下文中使用,它无法改变它的行为。
如果您不想计算某些内容而只是想知道是否有不超过一次的用途:
if (!someEnumerable.Skip(1).Any()) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
但是,如果someEnumerable正在实现ICollection<TSource>or ICollection(如数组、列表或字典),则该方法被优化为仅使用该Count属性,因此不需要枚举所有项目(source)。那么这将是一个微观优化,会损害可读性,我可能更喜欢Count() < 2。
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |