gpt4 book ai didi

c# - 枚举的基类

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:33 24 4
gpt4 key购买 nike

我有以下困境:

我有几个枚举类型:

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 实现了一个空接口(interface)。现在引用通用类的类看起来像这样:

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);
}

这只是一个提示,其他人可能会遇到这个问题,以便获得完整的答案。

最佳答案

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

关于c# - 枚举的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com