扩展方法有一个说法: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