c# - 无法在泛型类型之间进行转换

标签 c# generics casting

我正在尝试这样做:

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/

相关文章:

c# - 在 Scala 中实现 ExpandoObject

C# 线程内存使用

java - 泛型代码删除不起作用

c# - Lazy<T> 延迟加载错误 : A field initializer cannot reference the non-static field, 方法或属性

java - 类型安全: The expression of type ArrayList[] needs unchecked conversion

c++ - 从结构到 LPVOID 的类型转换

c# - 以最大并行度将 IEnumerable<T> 转换为 IObservable<T>

c# - 测试接口(interface)是否支持某个方法并调用它的最佳实践是什么?

java - 枚举作为类中的泛型类型,但使用方法需要显式强制转换

c - 为什么从返回 int32_t 的函数返回 0x80000000 不会导致警告?