如何解决';扩展方法必须在非泛型静态类';中定义;
本文关键字:定义 静态类 泛型 扩展 何解决 解决 方法 | 更新日期: 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) {
...
}
}