枚举的基类

时间:2013-11-16 15:42:07

标签: c# .net generics 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>());

问题是,我无法弄明白 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);
}

对于可能遇到此问题的其他人来说,这只是一个抬头,以便得到完整的答案。

1 个答案:

答案 0 :(得分:1)

如果您的泛型类具有通用的非泛型接口,则可以使用该接口。否则,您需要求助于将其存储为对象并使用您存储为键的类型转换结果。