我有一个通用类型 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/