【问题标题】:How to solve 'Extension method must be defined in a non-generic static class'? [duplicate]如何解决“必须在非泛型静态类中定义扩展方法”? [复制]
【发布时间】:2014-12-23 14:11:30
【问题描述】:

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

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

代码如下:

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

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

【问题讨论】:

  • 您是打算添加扩展方法还是错误地在方法参数中添加了此关键字?如果是后者,只需从参数中删除 this 关键字,如果是前者则 do what compiler says

标签: c# asp.net


【解决方案1】:

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

扩展方法用static修饰符标记,它的第一个参数用this修饰符标记,例如:

public static void Method(this string arg) {}

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

【讨论】:

    【解决方案2】:

    嗯,它准确地告诉你出了什么问题 - 除了非泛型静态类之外,你不能将扩展方法(第一个参数以 this 开头的静态方法)放在任何东西中。查找第一个参数以this 开头的方法(或多个方法),并将它们移动到新的非泛型静态类:

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

    【讨论】:

      【解决方案3】:

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

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

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

      但请确保您确实打算使用扩展方法。如果它只是您要调用的方法,则不必是扩展方法。然后删除this 关键字。

      【讨论】:

        【解决方案4】:

        按照编译器的要求做应该做

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

        【讨论】:

          猜你喜欢
          • 2023-03-10
          • 1970-01-01
          • 2012-01-01
          • 2016-10-25
          • 2014-10-31
          相关资源
          最近更新 更多