我很好奇在IEnumerable上使用ToList()而不仅仅是调用List Constructor' List(IEnumerable)'。
示例:
int[] testArray = new int[10];
var list = testArray.ToList();
VS
int[] testArray = new int[10];
var list = new List<int>(testArray);
使用其中一个是否会对性能产生任何影响或最佳做法?
我已经接管了一个应用程序,我调用的控制器方法会返回一个数组,但我所拥有的视图需要一个List。
答案 0 :(得分:7)
像其他人已经说过的那样,大多数时候最好的做法是做一些更具可读性的东西(我认为这意味着使用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);
}
因此,它的性能应该与new List
相同,加上一个null
检查和一个方法调用。但这两项补充都可能会被优化掉。