【发布时间】:2017-06-27 09:01:41
【问题描述】:
我正在尝试使用扩展为任何 c# 对象实现扩展。
我的方法将使用我无法修改的对象 X,并将对象的类型作为参数。问题是我想保留这个对象;我不希望它被垃圾收集。
这是我当前的代码,但我不能在非泛型静态类中声明扩展方法(Extensions_S<T> 是不允许的。编译器的错误消息是“扩展方法必须在非泛型静态中定义类”)。
namespace Lib
{
public static class Extensions_S<T>
{
private static X generateA_X = null;
public static A generateA<T>(this T value)
{
if (generateA_X == null)
generateA_X = new X(typeof(T));
return generateA_X.from(value);
}
}
}
generateA_X 实际上相当于一个静态方法变量。我想要一个调用此扩展方法的每种类型 T 的 不同实例。
这就是我尝试将Extensions_S 设为通用的原因。
我的问题是:有解决方法吗?
【问题讨论】:
-
Extension_S上的参数T没有在任何地方使用,所以看起来你可以删除它。 -
你的标题与你的类的通用性不匹配。
-
请尝试阅读错误信息。我相信编译器的确切错误消息是“扩展方法必须在非泛型静态类中定义”。如果您想问为什么存在此限制,请询问。
-
请创建一个可以直接编译的minimal reproducible example。也总是发布确切的错误消息。
标签: c# generics extension-methods static-methods static-variables