这是一个有点长的问题,所以请多多包涵。
我需要在一组字符串和每个字符串的相应通用方法调用之间创建一个映射。但是我遇到了一个编译问题,下面解释一下。
在我的场景中,我使用的是Dictionary<>
,但问题同样存在于List<>
. 为简单起见,我List<>
在下面的示例中使用 a 。
考虑这三个类:
public abstract class MyBase { /* body omitted */ }
public class MyDerived1 : MyBase { /* body omitted */ }
public class MyDerived2 : MyBase { /* body omitted */ }
以及其他一些类中的方法:
public class Test
{
public T GetT<T>() where T : MyBase { /* body omitted */ }
}
在另一个类中,我可以List<Func<MyBase>>
这样声明:
public class SomeClass
{
public void SomeFunc()
{
var test = new Test();
var list1 = new List<Func<MyBase>>
{
test.GetT<MyDerived1>,
test.GetT<MyDerived2>
};
}
}
这一切都很好。
但是,如果我想要一个返回这样的泛型类的函数怎么办:
public class RetVal<T> where T : MyBase { /* body omitted */ }
public class Test
{
public RetVal<T> GetRetValT<T>() where T : MyBase
{
return null;
}
}
我想List<>
使用这个函数创建一个等价物。即一个列表>>?
public class Class1
{
public void SomeFunc()
{
var test = new Test();
var list2 = new List<Func<RetVal<MyBase>>>
{
test.GetRetValT<MyDerived1>, // compile error
test.GetRetValT<MyDerived2> // compile error
};
}
}
我得到Expected a method with 'RetVal<MyBase> GetRetValT()' signature
.
那么,有什么办法可以解决这个问题,还是有另一种方法可以用来创建我的字符串...通用方法调用映射?