unity游戏引擎- c#:从枚举到类的自动转换
本文关键字:转换 枚举 引擎 游戏 unity | 更新日期: 2023-09-27 18:01:49
考虑这个场景。
- 有一个
struct
Color
(由别人写的) - 有
enum ColorCode
实现html命名的颜色代码。 - 有一个静态函数可以将
ColorCode
转换为Color
-
我希望能够做到这一点:
Color tmp = ....; tmp = ColorCode.Aqua;
如何在不复制粘贴140次的情况下做到这一点?
我真的不关心ColorCode
是什么(enum, class,无论什么),只要上面的行工作。
问题:
c#不允许为枚举定义操作符。我也没有任何宏来在ColorCode
中制作一些很好的人类可读的表。
:
ColorCode
的内容应该可以作为int
s使用,但是应该可以分配/转换到Color
。
代码片段:
public enum ColorCode{
AliceBlue = 0xF0F8FF,
AntiqueWhite = 0xFAEBD7,
Aqua = 0x00FFFF,
Aquamarine = 0x7FFFD4,
Azure = 0xF0FFFF, ///Repeat 140 times
...
}
public static Color colorFromCode(ColorCode code){
....
}
可以在enum上编写扩展方法:
public static Color ToColor(this ColorCode colorCode)
{
...
}
那么你可以:
Color tmp = ColorCode.Aqua.ToColor();
这不是一个隐式转换,但它是你可能得到的可读的。
您可以将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
s转换为Color
s:
Color tmp = ColorCode.Aqua;