Имеет ли смысл указывать конкретный тип в ToList<T>()
, AsEnumerable<T>()
и т. Д. Методы?ToList <T>() vs ToList()
Будет ли .ToList<SomeClass>()
выполнять быстрее, чем просто .ToList()
?
Имеет ли смысл указывать конкретный тип в ToList<T>()
, AsEnumerable<T>()
и т. Д. Методы?ToList <T>() vs ToList()
Будет ли .ToList<SomeClass>()
выполнять быстрее, чем просто .ToList()
?
Имеет смысл, если компилятор указывает один тип, и вы хотите указать другое. В противном случае это не имеет смысла.
Например, предположим, что у вас есть 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()
?
Нет, из-за вышесказанного ... тот же код сгенерирован.
Это тот же самый метод
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source);
Параметр типа может быть выведен компилятором, так что вам не нужно указывать его (если не нужно List
различного типа, чем IEnumerable
- в этом случае вам нужно явно указать тип).