ToList <t>()vs ToList()

时间:2015-11-05 12:04:49

标签: c# .net performance list generics

ToList<T>()AsEnumerable<T>()等方法中指定具体类型是否有意义?

.ToList<SomeClass>()执行速度会不仅仅是.ToList()吗?

2 个答案:

答案 0 :(得分:10)

如果编译器推断出一种类型并且您想要指定另一种类型,那么这是有意义的。否则就没有意义了。

例如,假设您有一个IEnumerable<string>并希望创建List<T> ...如果您想要List<string>,那么只需致电ToList()。如果您想使用通用协方差并获得List<object>,请致电ToList<object>

IEnumerable<string> strings = new [] { "foo" };
List<string> stringList = strings.ToList();
List<object> objectList = strings.ToList<object>();

无论您使用上述代码还是

,中间行生成的IL都是相同的
List<string> stringList = strings.ToList<string>();

这只是编译器为你推断类型的问题。

  

.ToList<SomeClass>()执行速度会不仅仅是.ToList()吗?

不,由于上述原因......生成相同的代码。

答案 1 :(得分:7)

它采用相同的方法

public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source);

类型参数可以由编译器推断,因此您不需要指定它(除非您需要与List不同类型的IEnumerable - 在这种情况下您需要明确指定类型。