避免使用枚举,而是使用带静态成员的静态类?

时间:2014-05-09 13:10:21

标签: c# enums

我想避免将我的所有枚举转换为byte类型。 MyFunctionbyte为参数。因此,当我想传递我的两个枚举类型MyEnumMyOtherEnum的枚举时,我必须将其转换为byte(正如我在MyFunction中调用{ {1}})。 所以我希望我的Main能够在不进行投射的情况下传递MyFunctionMyEnum值。像MyOtherEnum一样。 这是可能的枚举,还是我必须为静态成员和getter声明一个类?

这是我的代码:

MyFunction(MyEnum.FOO)

2 个答案:

答案 0 :(得分:3)

我不知道为什么你需要这样做,但最简单的事情就是编写一组包装器:

MyFunction(MyEnum value)
{
   MyFunction((byte)value);
}
MyFunction(MyOtherEnum value)
{
   MyFunction((byte)value);
}
MyFunction(byte value)
{
  //do something with value
}

答案 1 :(得分:0)

我没有亲自检查,但尝试使用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