[英]C#: automatic conversion from enum to class
考虑这种情况。
struct
Color
(由其他人写) enum ColorCode
实现了html命名的颜色代码。 ColorCode
转换为Color
我希望能够这样做:
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
成为一个结构(比一个类更好,因为它实际上只是一个值),然后定义从ColorCode
到Color
的隐式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 };
}
}
从int
到Color
的隐式转换只是为了使命名颜色代码的定义更容易(例如,你可以这样做, AliceBlue = 0xF0F8FF
)。 此时,您可以轻松地将ColorCode
转换为Color
s:
Color tmp = ColorCode.Aqua;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.