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

本文关键字:定义 静态类 泛型 扩展 何解决 解决 方法 | 更新日期: 2023-09-27 18:28:01

我对C#很陌生,从一个朋友那里得到了一个项目,当我试图编译它时遇到了这个错误:

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

代码如下:

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

可能是一个很简单的问题,但我想不通。

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

您可能正试图在该类中定义一个扩展方法。

扩展方法用static修饰符标记,其第一个自变量用this修饰符标记,例如:

public static void Method(this string arg) {}

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

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

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

在方法签名中使用this关键字,表示它是一个扩展方法。

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

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

不过,请确保您确实打算使用扩展方法。如果它只是一个您想要调用的方法,那么它实际上不必是一个扩展方法。然后删除this关键字。

按照编译器的意愿行事应该这样做

  // 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) {
      ...
    }
  }