扩展方法可以有通用参数吗?

Gil*_*lla 3 c# linq generics extension-methods linq-to-xml

扩展方法可以说:List作为参数之一吗?

public static IEnumerable<XElement> GetSequenceDescendants(this IEnumerable<XElement> elements, params List<XName> names)
        {
            //do something
        }
Run Code Online (Sandbox Code Playgroud)

扩展方法可以对参数类型有任何限制吗?

Ben*_*thy 7

简短的回答是扩展方法只是一个公共静态方法,可以像第一个参数的实例方法一样访问(感谢this关键字).这意味着您可以使用可在任何静态方法中使用的相同参数.

但是,如果您希望参数实际上是通用的,则需要将方法更改为:

public static IEnumerable<TElement> GetSequenceDescendants<TElement, TName>(this IEnumerable<TElement> elements, List<TName> names)
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

您必须在方法定义中指定所有泛型参数.

此外,你不能使用除params数组之外的任何关键字,即params TName[]可以,但params List<TName>不是.