我正在尝试这样做:
interface IA
{
}
class A : IA
{
}
class Foo<T> where T: IA
{
}
class Program
{
static void Main( string[] args )
{
Foo<A> fooA = new Foo<A>();
Foo<IA> fooIA = fooA as Foo<IA>;
}
}
但是,来自 Foo<A>
的 Actor 阵容至Foo<IA>
不编译。我记得在 List<T>
之间进行转换时看到过这样的协方差问题's,但我认为它不适用于像这样的简单泛型。
有什么好的办法可以让这个 Actor 阵容发挥作用吗?我该如何解决这个问题?
最佳答案
所有通用类都是不变的。另一方面,接口(interface)(和委托(delegate))可以支持同变和逆变,但前提是可以安全地支持。他们需要明确选择加入。
例如通过IFoo<out T>
或IFoo<in T>
关于c# - 无法在泛型类型之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028347/