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

本文关键字:泛型 静态类 定义 扩展 方法 错误 | 更新日期: 2023-09-27 18:15:06

我在类名处得到以下编译错误:

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

我没有使用正常的类。这是什么原因呢?我不知道也不想使用扩展方法。

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

根据要求,以下是我的评论作为回答:

没有你的代码,我们做不了什么。我的猜测是你不小心在参数列表的某个地方输入了"this"。

扩展方法示例

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

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

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"这个词

我猜这与你之前的列表问题有关;如果是这样,我提供的示例一个扩展方法,它将是:

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

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

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

如何张贴你的代码?扩展方法是通过在静态方法的第一个参数前面加上this来声明的。既然你不愿意使用扩展方法,我怀疑你不小心用this启动了一个参数列表。

查找如下内容:

void Method(this SomeType name)
{
}