C#:在foreach中使用Take()是声明可以使用吗?

ALA*_*SUR 2 c# linq ienumerable ienumerator foreach

任何人都可以建议我们应该使用哪两行代码?

foreach(var items in itemList.Take(20))
{

}
Run Code Online (Sandbox Code Playgroud)

要么

var itemList = itemList.Take(20);

foreach(var items in itemList)
{

}
Run Code Online (Sandbox Code Playgroud)

以上两行在优化代码方面是否有任何区别?如果是,请告诉我原因.

ang*_*son 5

不,这两段代码不会表现不同.

事实上,如果你看一下这个SharpLab示例,你会注意到这两段代码编译成完全相同的IL.

所以:

  • 代码看起来不同,如果对很重要,选择您认为最舒适的代码
  • 代码将编译完全相同的输出(在发布版本中),在这种情况下,代码的外观(在这种情况下)与代码的行为或性能无关

简而言之,选择您认为最好的版本.