2013-05-19 43 views
0

我正在查看stackoverflow的answer以瞭解有關C#擴展方法的更多信息。在方法名稱後我無法理解部分<T>。更確切地說:爲什麼<T>放置在C#中某些擴展方法的方法名後面

public static bool In<T>(this T source, params T[] list) 
{ 
    if(null==source) throw new ArgumentNullException("source"); 
    return list.Contains(source); 
} 

我可以理解T是指任何類的通用名稱。爲什麼我們需要<T>這個擴展方法的方法名後?

+2

否則它不會是一個通用的擴展方法。現在你可以使用它與任何類型。不是'T'表示泛型,如果你願意的話,你也可以把它稱爲'TheType'。 –

回答

1

由於該方法需要是通用的,以便對任何給定類型的實例進行操作,如T所示。 <T>只是告訴編譯器該方法是通用的,並且類型參數爲T。如果你不這樣做,編譯器會將T視爲實際類型,當然這不是。

2

T本身並不意味着它是通用的。如果名稱後面有<>,這意味着它是通用的,在此情況下使用通用參數T

public static bool In<ParameterType>(this ParameterType source, params ParameterType[] list) 
{ 
    if(null==source) throw new ArgumentNullException("source"); 
    return list.Contains(source); 
} 
1

它允許將此擴展方法應用於任何類型,由於方法是通用的。但檢查if(null==source)假設方法將與引用類型一起使用。實際上,你可能會得到NRE,我建議添加檢查空傳入列表參數。

+0

他爲什麼要檢查'nulls'?如果列表爲空,它會引發一個'NullReferenceException'。 –

+0

return list.Contains(source); - 如果列表爲空,他將得到空引用異常(NRE)。在方法中,如果列表爲null,則返回false。 – Uzzy

+0

當然可以。總是會發生同樣的情況,如果有人試圖用'null'做某件事情,這就是所希望的行爲。 –

相關問題