错误:必须在非泛型静态类中定义扩展方法

时间:2011-11-19 13:03:48

标签: c# extension-methods

我在类名中遇到以下编译错误。

Extension method must be defined in a non-generic static class

我没有使用普通班级。这可能是什么原因。我不知道也不想使用扩展方法。

6 个答案:

答案 0 :(得分:42)

根据要求,这是我的评论作为答案:

没有你的代码,我们无能为力。我最好的猜测是你不小心在参数列表中的某处输入了“this”。

答案 1 :(得分:5)

扩展方法的示例

public static class ExtensionMethods {
 public static object ToAnOtherObject(this object obj) {
  // Your operation here
 }
}

答案 2 :(得分:3)

我遇到了同样的问题,并按如下方式解决了问题。我的代码是这样的:

public static class ExtensionMethods 
{
    public static object ToAnOtherObject(this object obj) 
    {
        // Your operation here
    }
}

我将其改为

public static class ExtensionMethods 
{
    public static object ToAnOtherObject(object obj) 
    {
        // Your operation here
    }
}

我删除了方法参数的“this”一词。

答案 3 :(得分:1)

我猜这与你的previous list question有关;如果是这样,我提供的示例扩展方法,并且将是:

public static class LinkedListUtils { // name doesn't matter, but must be
                                      // static and non-generic
    public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) {...}
}

此实用程序类不需要与使用类相同,但扩展方法是如何使用list.Reverse()

如果您不希望它作为扩展方法,您可以将其作为本地静态方法 - 只需从第一个参数中删除“this”:

public static IEnumerable<T> Reverse<T>(LinkedList<T> list) {...}

并用作:

foreach(var val in Reverse(list)) {...}

答案 4 :(得分:0)

创建扩展方法时需要考虑以下几点:

  1. 定义扩展方法的类必须是非泛型static
  2. 每个扩展方法必须是static方法
  3. 扩展方法的第一个参数应使用this关键字。

答案 5 :(得分:0)

发布代码怎么样?扩展方法通过在静态方法的第一个参数之前声明。由于您不会使用扩展方法,我怀疑您不小心使用this启动了参数列表。

寻找类似的东西:

void Method(this SomeType name)
{
}