2015-11-05 41 views

回答

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); 

的類型參數可以由編譯器來推斷,所以你並不需要指定它(除非你需要不同類型的ListIEnumerable - 在這種情況下你需要明確指定類型)。