2015-11-05 3 views
1

Имеет ли смысл указывать конкретный тип в ToList<T>(), AsEnumerable<T>() и т. Д. Методы?ToList <T>() vs ToList()

Будет ли .ToList<SomeClass>() выполнять быстрее, чем просто .ToList()?

ответ

9

Имеет смысл, если компилятор указывает один тип, и вы хотите указать другое. В противном случае это не имеет смысла.

Например, предположим, что у вас есть 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()?

Нет, из-за вышесказанного ... тот же код сгенерирован.

6

Это тот же самый метод

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

Параметр типа может быть выведен компилятором, так что вам не нужно указывать его (если не нужно List различного типа, чем IEnumerable - в этом случае вам нужно явно указать тип).