繁体   English   中英

枚举的基类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM