C#:从枚举到类

时间:2015-07-09 17:30:38

标签: c# unity3d enums

考虑这种情况。

  1. struct Color(由其他人撰写)
  2. enum ColorCode实现了html命名的颜色代码。
  3. 这是一个将ColorCode转换为Color
  4. 的静态函数
  5. 我希望能够做到这一点:

    Color tmp = ....;
    tmp = ColorCode.Aqua;
    
  6. 如果没有140次复制粘贴文本,我该怎么做?

    只要上述行有效,我就不在乎ColorCode是什么(枚举,类,等等)。

    问题:

    C#不允许我为枚举定义运算符。 我也没有任何宏可以在ColorCode中创建一个很好的人类可读表格。

    限制

    ColorCode的内容应该以{{1​​}}的形式提供,但应该可以转让/转换为int

    代码片段:

    Color

2 个答案:

答案 0 :(得分:10)

您可以在枚举上编写扩展方法:

public static Color ToColor(this ColorCode colorCode)
{
    ...
}

然后你可以:

Color tmp = ColorCode.Aqua.ToColor();

这不是一个隐含的转换,但它可读性与你可能得到的一样。

答案 1 :(得分:2)

你可以使ColorCode成为一个结构(比一个类更好,因为它实际上只是一个值),然后定义从ColorCodeColor的隐式强制转换:

struct ColorCode
{
    int hex;
    public static readonly ColorCode
        AliceBlue = 0xF0F8FF,
        AntiqueWhite = 0xFAEBD7;
    // and the rest of the ColorCodes

    public static implicit operator Color(ColorCode cc)
    {
        return /* cc converted to a Color */;
    }
    public static implicit operator ColorCode(int cc)
    {
        return new ColorCode() { hex = cc };
    }
}

intColor的隐式演员只是为了让您的命名颜色代码的定义更容易(例如,您可以这样做AliceBlue = 0xF0F8FF)。此时,您可以轻松地隐式地将ColorCode转换为Color s:

Color tmp = ColorCode.Aqua;