[英]Can extension methods have generic parameters?
擴展方法可以說:List作為參數之一嗎?
public static IEnumerable<XElement> GetSequenceDescendants(this IEnumerable<XElement> elements, params List<XName> names)
{
//do something
}
擴展方法可以對參數類型有任何限制嗎?
簡短的回答是擴展方法只是一個公共靜態方法,可以像第一個參數的實例方法一樣訪問 (感謝this
關鍵字)。 這意味着您可以使用可在任何靜態方法中使用的相同參數。
但是,如果您希望參數實際上是通用的,則需要將方法更改為:
public static IEnumerable<TElement> GetSequenceDescendants<TElement, TName>(this IEnumerable<TElement> elements, List<TName> names)
{
//do something
}
您必須在方法定義中指定所有泛型參數。
此外,除了數組之外,你不能使用params
關鍵字,即params TName[]
是可以的,但params List<TName>
不是。
類型感染有限制(例如編譯器可以從參數中猜出泛型類型。擴展方法有一個限制:你可以“取消引用”空指針(你可以編寫和擴展方法bool IsNullorEmpty(this string)
和在空字符串上使用它。
例如:Linq充滿了很好的通用擴展方法,你可以在這個問題中看到很多很好的例子(巧妙地使用泛型):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.