[英]Base class for Enums
我有以下困境:
我有几种枚举类型:
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>());
问题是,我无法弄清楚, 如果我可以表达一些{枚举基本类型},这样在构造函数中的指令可以工作。
有任何想法吗? 如果您需要更多信息,请告诉我。
编辑:
感谢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);
}
对于其他可能陷入该问题的人来说,这只是一个提示,以便获得完整的答案。
如果您的泛型类具有公共的非泛型接口,则可以使用该接口。 否则,您需要诉诸将其存储为对象,并使用存储为键的类型强制转换结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.