我有这样的方法如何创建一个通用的Func键代表
public static T F<T>(T arg)
{
return arg;
}
,我想一个函数功能委托给F.我试试这个
public Func<T, T> FuncF = F;
,但它不是语法正确。我如何做到这一点。
我有这样的方法如何创建一个通用的Func键代表
public static T F<T>(T arg)
{
return arg;
}
,我想一个函数功能委托给F.我试试这个
public Func<T, T> FuncF = F;
,但它不是语法正确。我如何做到这一点。
只有类和方法本身可以是通用的。使用泛型参数字段必须是一个通用类范围内:
public class Test<T>
{
public static T F(T arg)
{
return arg;
}
public Func<T, T> FuncF = F;
}
或者如果F
类型参数不应该被连接到FuncF
,那么就使用不同的名称参数之一:
public class Test<T>
{
public static U F<U>(U arg)
{
return arg;
}
public Func<T, T> FuncF = F;
}
F<int>
是一种可分配给Func<int, int>
变量的方法。
F<double>
是一种不同的方法,可以分配给Func<double, double>
变量。
但是你不能有一个通用变量。 C#就是不这样工作。
的最接近通用的变量是一个通用类的字段:
static class DelegateContainer<T>
{
public static Func<T, T> FuncF = F;
}
只能(重新)从通用类暴露仿制药,或在一个通用的方法。否则,您将需要为T
提供确定的类型(例如,用于局部变量或作为非泛型类中的字段或属性)。例子:
// I.e. Re-expose by wrapping your Func in a static class:
public static class MyFuncs
{
public static T F<T>(T arg)
{
return arg;
}
}
public class Generics<T>
{
// Use it as a field
private Func<T, T> f = MyFuncs.F;
// Or getter func
public Func<T, T> FuncF()
{
return MyFuncs.F;
}
}
// Re-expose generic via Generic Method
public class GenericMethod
{
public Func<T, T> FuncF<T>()
{
return MyFuncs.F;
}
}
// i.e. Consume the generic and do not re-expose it
public class SpecificClass
{
public Foo FuncF(Foo f)
{
return MyFuncs.F<Foo>(f); // <Foo> is optional - compiler can infer
}
}
似乎没什么问题https://dotnetfiddle.net/JRjFxU – dcastro 2014-11-05 13:57:19
是一个通用的TPE – 2014-11-05 13:58:46
@dcastro您已经添加的东西是不是在原来的问题,这就是为什么它的工作原理。 – 2014-11-05 14:02:37