繁体   English   中英

C#:从枚举到类的自动转换

[英]C#: automatic conversion from enum to class

考虑这种情况。

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

     Color tmp = ....; tmp = ColorCode.Aqua; 

如何在没有复制粘贴文本140次的情况下执行此操作?

只要上面的代码行,我就不在乎ColorCode是什么(枚举,类,等等)。

问题:

C#不允许我为枚举定义运算符。 我也没有任何宏来在ColorCode制作一些漂亮的人类可读表格。

限制

ColorCode内容应该以int单位,但应该可以赋值/可转换为Color


代码片段:

public enum ColorCode{
    AliceBlue = 0xF0F8FF,
    AntiqueWhite = 0xFAEBD7,
    Aqua = 0x00FFFF,
    Aquamarine = 0x7FFFD4,
    Azure = 0xF0FFFF,  ///Repeat 140 times
    ...
}

public static Color colorFromCode(ColorCode code){
 ....
}

你可以在枚举上写一个扩展方法:

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

然后你可以:

Color tmp = ColorCode.Aqua.ToColor();

它不是一个隐含的转换,但它可以像你可能获得的那样可读。

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

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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