扩展方法可以说:List作为参数之一吗?
public static IEnumerable<XElement> GetSequenceDescendants(this IEnumerable<XElement> elements, params List<XName> names)
{
//do something
}
扩展方法可以对参数类型有任何限制吗?
答案 0 :(得分:7)
简短的回答是扩展方法只是一个公共静态方法,可以像第一个参数的实例方法一样访问(感谢this
关键字)。这意味着您可以使用可在任何静态方法中使用的相同参数。
但如果您希望参数实际上是通用的,则需要将方法更改为:
public static IEnumerable<TElement> GetSequenceDescendants<TElement, TName>(this IEnumerable<TElement> elements, List<TName> names)
{
//do something
}
您必须在方法定义中指定所有通用参数。
此外,您不能将params
关键字用于除数组之外的任何内容,即params TName[]
没问题,但params List<TName>
不是。
答案 1 :(得分:0)
类型感染有限制(例如编译器可以从参数中猜出泛型类型。扩展方法有一个限制:你可以“取消引用”空指针(你可以编写和扩展方法{{1}并在空字符串上使用它。
例如:Linq充满了很好的通用扩展方法,你可以在这个问题中看到很多很好的例子(巧妙地使用泛型):
What are your favorite extension methods for C#? (codeplex.com/extensionoverflow)