簡體   English   中英

擴展方法可以有通用參數嗎?

[英]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充滿了很好的通用擴展方法,你可以在這個問題中看到很多很好的例子(巧妙地使用泛型):

你最喜歡的C#擴展方法是什么? (codeplex.com/extensionoverflow)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM