避免强制转换枚举,而是使用带有静态成员的静态类
本文关键字:静态成员 静态类 转换 枚举 | 更新日期: 2023-09-27 18:02:29
我想避免将所有枚举强制转换为类型byte
。MyFunction
以byte
为参数。因此,当我想传递我的两个枚举类型MyEnum
和MyOtherEnum
的枚举时,我必须将其转换为byte
(正如我在Main
中调用MyFunction
时所做的那样)。所以我想要的是我的MyFunction
能够传递MyEnum
和MyOtherEnum
值而不需要强制转换。比如MyFunction(MyEnum.FOO)
。这是可能的枚举还是我必须为他们声明一个类与静态成员和getter ?
这是我的代码
namespace myspace{
enum MyEnum{
FOO = 0x00,
BAR = 0x01
}
MyOtherEnum{
FOO2 = 1,
BAR2 = 3
}
class TestClass
{
static void Main(string[] args)
{
MyFunction( (byte) MyEnum.FOO); //Casting necessary
MyFunction( MyEnum.FOO); // Would love to be able to do this...
MyFunction( MyOtherEnum.FOO2); // ...And this
}
MyFunction(byte value)
{
//do smth with value
}
}
};
我不知道为什么需要这样做,但最简单的事情就是编写一组包装器:
MyFunction(MyEnum value)
{
MyFunction((byte)value);
}
MyFunction(MyOtherEnum value)
{
MyFunction((byte)value);
}
MyFunction(byte value)
{
//do something with value
}
没有亲自检查,但尝试使用System.Enum
而不是byte
来掌握MyFunction。
public class MyEnum
{
public const byte FOO = 0x00;
public const byte BAR = 0x01;
}
和
public class MyOtherEnum
{
public const byte FOO2 = 1;
public const byte BAR2 = 3;
}
现在你的代码会吃掉
MyFunction(MyEnum.FOO);
MyFunction(MyOtherEnum.FOO2);
但是如果你想让它更像enum,为两者都创建一个基类,并确保它包含当前值的另一个字节值。在这种情况下,像下面这样声明MyFunction:
MyFunction(MyEnumBase value)
{
//do smth with value
}
希望有帮助,Yanir