避免强制转换枚举,而是使用带有静态成员的静态类

本文关键字:静态成员 静态类 转换 枚举 | 更新日期: 2023-09-27 18:02:29

我想避免将所有枚举强制转换为类型byteMyFunctionbyte为参数。因此,当我想传递我的两个枚举类型MyEnumMyOtherEnum的枚举时,我必须将其转换为byte(正如我在Main中调用MyFunction时所做的那样)。所以我想要的是我的MyFunction能够传递MyEnumMyOtherEnum值而不需要强制转换。比如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