有人可以建议我们应该使用以下两行代码吗?
foreach(var items in itemList.Take(20))
{
}
或
var itemList = itemList.Take(20);
foreach(var items in itemList)
{
}
以上两行在优化代码方面是否有任何区别,如果是,请告诉我原因。
答案 0 :(得分:5)
不,这两段代码不会表现不同。
事实上,如果你看看这个SharpLab example,你会注意到这两段代码编译成完全相同的IL。
所以:
简而言之,选择您认为最佳的版本。
答案 1 :(得分:0)
foreach
仅在in
个关键字后评估该方法一次。一个非常简单的例子ConsoleApplication
:
public class Test
{
public IEnumerable<int> ReturnAList()
{
Console.WriteLine("ReturnAList called");
return new List<int>()
{
1, 1, 2, 3, 5, 8, 13, 21, 34
};
}
}
然后:
var test = new Test();
foreach(var t in test.ReturnAList())
{
Console.WriteLine(t);
}
您将看到输出为:
// ReturnAList called
// 1
// 1
// 2
// 3
// 5
// 8
// 13
// 21
// 34
答案 2 :(得分:0)
感谢您的见解。
但是我已经编写了一个控制台应用程序,第一个例子(直接迭代Take())在执行中消耗的时间比后者少。