我很好奇在IEnumerable上使用ToList()而不仅仅是调用List Constructor'List(IEnumerable)'对性能的影响.
例:
int[] testArray = new int[10];
var list = testArray.ToList();
Run Code Online (Sandbox Code Playgroud)
与
int[] testArray = new int[10];
var list = new List<int>(testArray);
Run Code Online (Sandbox Code Playgroud)
使用其中一个是否有任何性能影响或最佳实践?
我已经接管了一个应用程序,我正在调用的控制器方法返回一个数组,但我所拥有的视图是一个List.
像其他人已经说过的那样,大多数时候最好的做法是做一些更具可读性的东西(我认为这意味着使用ToList()).两种方式完全相同,所以你应该期望它们的性能非常相似.
如果分析显示这是您需要优化的代码,那么您应该尝试两种方式并测量哪一种更快.
查看源代码(在.Net基本库的情况下,您可以查看Reference Source或使用反编译器)也可能有所帮助.ToList看起来像这样:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) {
if (source == null) throw Error.ArgumentNull("source");
return new List<TSource>(source);
}
Run Code Online (Sandbox Code Playgroud)
因此,它的性能应该与new List一个null检查和一个方法调用相同.但两种增加都可能会被优化掉.