如何解决'扩展方法必须在非泛型静态类中定义'?

时间:2014-10-28 08:34:14

标签: c# asp.net

我是C#的新手并且从朋友那里得到了一个项目,当我尝试编译它时我遇到了这个错误:

  

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

代码如下所示:

public partial class _Default : System.Web.UI.Page {

可能是一个非常简单的问题,但我无法弄明白。

4 个答案:

答案 0 :(得分:0)

您可能正在尝试在该课程中定义extension method

扩展方法标有static修饰符,第一个参数标有this修饰符,例如:

public static void Method(this string arg) {}

如果您错误地添加了this修饰符,只需将其删除即可使其成为常规静态方法。 如果您是故意这样做的,请将方法声明移动到静态非泛型非嵌套类。

答案 1 :(得分:0)

嗯,它告诉你到底出了什么问题 - 你不能把扩展方法(第一个参数前面带有this的静态方法)放在非泛型静态类之外的任何东西上。查找第一个参数前面有this的方法(或方法),并将它们移动到一个新的非泛型静态类:

public static class SomeExtensions
{
    // Extension methods go here, e.g.
    public static void SomeMethod(this SomeClass firstParam, int secondParam)
    {
        // ...
    }
}

答案 2 :(得分:0)

您在方法签名中使用this关键字,表示它是extension method

您应该创建一个static类来包含这些方法。签名必须是这样的:

public static class PageExtensionMethods
{
    public static void SomeMethod(this SomeType s)
    { }
}

但请确保您真的有意使用扩展方法。如果它只是您想要调用的方法,那么它实际上不一定是扩展方法。然后删除this关键字。

答案 3 :(得分:0)

只要做,因为编译器想要应该完成

  // Public static non generic class (exactly what compiler wants)
  public static class PageExtensions {
    ...
    // Your extension method for System.Web.UI.Page
    public static void MyExtensionMethod(this System.Web.UI.Page value) {
      ...
    }
  }