[英]Is there a difference between these two ways of using foreach?
下面显示的两个代码段之间有区别吗?
在foreach
子句之前将属性加载到变量中。
var someCollection = someClass.Collection; foreach (var elem in someCollection) { // Do something }
在foreach
子句中内联访问的属性。
foreach (var elem in someClass.Collection) { // Do something }
第二种变体是不是很优化,如果是这样,为什么?
两种方法之间没有区别 ,优化或性能方面。 为了证明这一点,我创建了一个类似于你的简短示例:
public class C {
public void A() {
foreach (var item in SomeClass.Collection) {}
}
public void B() {
var someCollection = SomeClass.Collection;
foreach (var item in someCollection) {}
}
}
public static class SomeClass {
public static List<string> Collection { get; set; }
}
使用Roslyn .NET编译器版本2.9.0进行编译时 ,方法A
和B
产生完全相同的中间代码,如下所示( 参考 )。
方法体A
和B
List<string>.Enumerator enumerator = SomeClass.Collection.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
string current = enumerator.Current;
}
}
finally
{
((IDisposable)enumerator).Dispose();
}
性能或优化没有区别。 唯一的区别是你的代码中还有一个变量,它包含你的集合的引用(一个地址,一个“指针”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.