c# - 适当的大型枚举设计

标签 c# architecture enums

我最近完成了用于计算机图形学类(class)的分子/蛋白质查看器的工作。原子显然是此类程序中非常重要的部分。目前,我有一个包含每个元素(氢、氦等)的大枚举。每个元素都有关联的信息,例如颜色、半径等。我正在使用扩展类,所以我可以这样写:

float r = Element.Neon.Radius();

我还需要能够从它的符号中获取相应的枚举。我把那个方法放在了有点乱的扩展类中:

Element carbon = ElementExtensions.FromAbbreviation("C");

我想将更多数据与特定元素条目相关联,但我不确定这是否是一个好的设计。目前每组关联数据都需要一个字典来抓取关联数据。也许我可以使用字典?

如果我使用 Element 类,我需要确保只有一个氢实例、一个氦实例等。我喜欢 System.Drawing.Color 的设计方式,但我不认为这正是我需要(例如,您永远不必查找 ForestGreen 的相关数据)。

支持大量但定义明确且数量有限的特定实例的最佳方法是什么?

最佳答案

枚举似乎不是解决这个问题的合适方法;相反,您应该创建一个 Element 类,其中包含与每个元素关联的所有信息,以及每个已知元素的静态只读属性:

public class Element
{
    private readonly string _symbol;
    private readonly int _atomicNumber;
    private readonly Color _color


    // Private constructor, since you don't want people to be able to "invent" random elements...
    private Element(string symbol, int atomicNumber, Color color)
    {
        _symbol = symbol;
        _atomicNumber = atomicNumber;
        _color = color;
    }

    public string Symbol { get { return _symbol; } }
    public int AtomicNumber { get { return _atomicNumber; } }
    public Color color { get { return _color; } }


    // Known elements

    private static readonly Element _hydrogen = new Element("H", 1, Color.White);
    private static readonly Element _carbon = new Element("C", 6, Color.Black);
    private static readonly Element _oxygen = new Element("O", 8, Color.Red);


    public static Element Hydrogen { get { return _hydrogen; } }
    public static Element Carbon { get { return _carbon; } }
    public static Element Oxygen { get { return _oxygen; } }


    ...

}

这样关于一个元素的所有信息都可以在一个地方,而不是分散在许多不同的地方

关于c# - 适当的大型枚举设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8501517/

相关文章:

c# - Visual Studio 扩展 (VSIX/DLL) 到一个 exe

c# - 如果角色名称包含空格,则无法使 AuthorizeAttribute 工作

java - 寻求意见 : architectural blueprints for instance level security

c# - C++ 和 .NET 是否在银行、医疗保健和电信等领域一起使用

python - 如何使用别名扩展枚举

angular - Angular 形式控件类型中的枚举?

c# - 使用工厂方法创建子类对象

c# - 使用反射的内部构造函数实例化类型

assembly - 为什么在 Mips 架构中寄存器 $a1 总是打印 0

java - 从 Jruby 中的 Jar 文件访问枚举