我有以下困境:
我有几种枚举类型:
Enum1
Enum2
...
我有一个通用的类实现
GenericClass<T> where T : struct and all the other interfaces :)
最后是一个包含字典的类:
Dictionary<Type, GenericClass<{some enum base type}>
在这个类的构造函数上,我做了类似的事情:
dictionary.Add(typeof(Enum1), new GenericClass<Enum1>());
dictionary.Add(typeof(Enum2), new GenericClass<Enum2>());
问题是,我无法弄明白 IF 我可以表达{some enum base type},以便构造函数中的指令可以正常工作。
有什么想法吗?如果您需要更多信息,请与我们联系。
修改
感谢nvoigt的回答,我终于达成了以下解决方案:
首先,对于一些上下文,GenericClass有两个与此线程相关的方法:
public void SetValue(T key, int value)
public int GetValue(T Key)
我让GenricClass实现了一个空接口。现在引用泛型类的类看起来像这样:
private Dictionary<Type, IGenericRequirementsCollection> _requirements;
public RequirementsCollection()
{
_requirements = new Dictionary<Type, IGenericRequirementsCollection>();
_requirements.Add(typeof(Enum1), new GenericRequirementsCollection<Enum1>());
_requirements.Add(typeof(Enum2), new GenericRequirementsCollection<Enum2>());
...
}
public int GetValue<T>(T key) where T : struct, IComparable, IFormattable, IConvertible
{
if (!_requirements.ContainsKey(typeof(T))) throw new ArgumentException();
return (_requirements[typeof(T)] as GenericRequirementsCollection<T>).GetValue(key);
}
public void SetValue<T>(T key, int value) where T : struct, IComparable, IFormattable, IConvertible
{
if (!_requirements.ContainsKey(typeof(T))) throw new ArgumentException();
(_requirements[typeof(T)] as GenericRequirementsCollection<T>).SetValue(key, value);
}
对于可能遇到此问题的其他人来说,这只是一个抬头,以便得到完整的答案。
答案 0 :(得分:1)
如果您的泛型类具有通用的非泛型接口,则可以使用该接口。否则,您需要求助于将其存储为对象并使用您存储为键的类型转换结果。