我有一个通用类型 GenericClass<Type_T> (如果有帮助,Type_T 会实现 IType_T)。我创建了它的一些实例,例如 GenericClass<Type1>GenericClass<Type2>

不,我想要一堆这些类实例的索引。
我首先想到了一个字典:Dictionary<int, GenericClass<Type1>>,它显然不起作用。

这个问题有已知的解决方案吗?如何存储泛型类型的索引集合?

最佳答案

您也可以查看 covariance in generics

您还需要为 GenericClass 定义一个通用接口(interface),但它可以是通用的:

interface IType { }
interface IGenericClass<out T> where T : IType { }
class Type1 : IType { }
class Type2 : IType { }
class GenericClass<T> : IGenericClass<T> where T : IType { }

class Program
{
    static void Main(string[] args)
    {
         Dictionary<int, IGenericClass<IType>> dict = new Dictionary<int, IGenericClass<IType>>();
                dict[0] = new GenericClass<Type2>();
                dict[1] = new GenericClass<Type1>();
     }
}

但它不允许:
 Dictionary<int, IGenericClass<object>> dict = new Dictionary<int, IGenericClass<object>>();

编辑:为了完整性

您不能使用它在 IGenericClass 中将 IType 作为参数传递。它需要逆变,使用逆变会破坏对 Dictionary<int, IGenericClass<IType>> dict 的赋值:


 interface IGenericClass<out T> where T : IType
 {
    T GetType(); //possible
    void SetType(T t); //not possible
 }

关于c# - 泛型类型、集合和对象引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31984051/

10-12 20:34