如何编译以下代码?
Action<MyClass<object, object>> func = x => Console.WriteLine(x.ToString());
public void Apply<T1, T2>(MyClass<T1, T2> target)
{
func.Invoke(target);
}
我知道它不起作用,因为 MyClass
最佳答案
好吧,一种选择是编写一个通用方法来返回正确类型的函数:
public void Apply<T1, T2>(MyClass<T1, T2> target)
{
GetFunc<T1,T2>().Invoke(target);
}
private Action<MyClass<T1,T2>> GetFunc()
{
return x => Console.WriteLine(x.ToString());
}
或者,如果您真的希望能够声明“我可以使用任何
MyClass
”操作,我建议您创建一个非泛型类型 MyClass
, 并制作 MyClass<T1,T2>
从中得出:public class MyClass
{
// Put common stuff in here
}
public class MyClass<T1, T2> : MyClass
{
// Put stuff using T1 and T2 here
}
然后你可以使用
Action<MyClass>
反而。
关于c# - 通用委托(delegate)或通用转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/588319/