在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
- 在這種情況下你需要明確指定類型)。