错误:扩展方法必须在非泛型静态类中定义
本文关键字:泛型 静态类 定义 扩展 方法 错误 | 更新日期: 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)) {...}
在创建扩展方法时需要考虑以下几点:
- 定义扩展方法的类必须非泛型和
static
- 每个扩展方法必须是
static
方法 - 扩展方法的第一个参数应该使用
this
关键字。
如何张贴你的代码?扩展方法是通过在静态方法的第一个参数前面加上this来声明的。既然你不愿意使用扩展方法,我怀疑你不小心用this
启动了一个参数列表。
查找如下内容:
void Method(this SomeType name)
{
}