考虑这种情况。
struct
Color
(由其他人撰写)enum ColorCode
实现了html命名的颜色代码。ColorCode
转换为Color
我希望能够做到这一点:
Color tmp = ....;
tmp = ColorCode.Aqua;
如果没有140次复制粘贴文本,我该怎么做?
只要上述行有效,我就不在乎ColorCode
是什么(枚举,类,等等)。
问题:
C#不允许我为枚举定义运算符。
我也没有任何宏可以在ColorCode
中创建一个很好的人类可读表格。
限制:
ColorCode
的内容应该以{{1}}的形式提供,但应该可以转让/转换为int
。
代码片段:
Color
答案 0 :(得分:10)
您可以在枚举上编写扩展方法:
public static Color ToColor(this ColorCode colorCode)
{
...
}
然后你可以:
Color tmp = ColorCode.Aqua.ToColor();
这不是一个隐含的转换,但它可读性与你可能得到的一样。
答案 1 :(得分:2)
你可以使ColorCode
成为一个结构(比一个类更好,因为它实际上只是一个值),然后定义从ColorCode
到Color
的隐式强制转换:
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;