在C#中迭代遍历集合的所有元素之间的更快捷方式

Chr*_*tos 9 c# foreach

我使用的语言是C#.

让我们有一个类型的对象列表T,

List<T> collection = new List<T>{.....};
Run Code Online (Sandbox Code Playgroud)

假设我们想要查看每个收集项目.这可以通过多种方式完成.其中,有以下两种:

foreach(var item in collection)
{
   // code goes here
}
Run Code Online (Sandbox Code Playgroud)

foreach(T item in collection)
{
    // code goes here
}
Run Code Online (Sandbox Code Playgroud)

第二种方式是否优于第一种方式,为什么?

提前感谢您的回答.

Chr*_*tle 24

它们都完全一样.var为方便起见,是语法糖.它与List遍历的速度没有区别.

我遵循的经验法则var是仅在赋值的右侧存在对象的类型时才使用它,所以在这种情况下我宁愿明确指定类型foreach以使其更清晰其他工程师,但这取决于个人选择.如果将鼠标悬停var在Visual Studio中,它将显示该类型(假设它可以推断出应该是什么).

  • 有时候`var`不仅仅是一种"语法糖",而且是必须的.例如,当您遍历匿名对象列表时. (3认同)
  • Chris是正确的,使用var肯定对速度没有影响 - 两个循环在编译时将被转换为相同的字节码. (2认同)

Ono*_*dai 8

引用MSDN:

隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型.

所以

var i = 10; // implicitly typed
int i = 10; //explicitly typed
Run Code Online (Sandbox Code Playgroud)

完全一样.

现在,为了"更好" - 它将在很大程度上取决于您的参数来判断它.如果它的速度,然后for循环可能会比一个更好foreach,而T[]不是更好List<T>,根据帕特里克Smacchia.要点:

  • forList上的foreach循环比List上的循环便宜2倍多.
  • 在数组上循环比在List上循环便宜约2倍.
  • 因此,使用for循环数组比使用List循环便宜5倍foreach(我相信,这就是我们所做的).

引用来源:在.NET中,哪个循环运行得更快,'for'或'foreach'?

参考:http://msdn.microsoft.com/en-us/library/bb383973.aspx