擴展方法有一個說法:List作爲參數之一嗎?擴展方法可以有通用參數嗎?
public static IEnumerable<XElement> GetSequenceDescendants(this IEnumerable<XElement> elements, params List<XName> names)
{
//do something
}
擴展方法可以有什麼參數類型的限制嗎?
擴展方法有一個說法: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的是滿好看的通用擴展方法,你可以看到很多很好的例子(智能使用泛型的)這樣一個問題:
What are your favorite extension methods for C#? (codeplex.com/extensionoverflow)
大多數擴展方法都有通用參數。 – Gabe 2011-01-24 21:49:41
I如果你從你的擴展方法聲明中取出參數,你的代碼就可以編譯。如果你不想從你的擴展方法中取出參數,你需要將列表更改爲XName [] –
2011-01-24 21:55:27