将Enum强制转换为IEnumerable字节

时间:2016-05-20 07:37:14

标签: c# enums casting compact-framework ienumerable

给出以下Enum

enum MyEnum {
   MyVal1 = 0x0000,
   MyVal2 = 0xF0F0,
   MyVal3 = 0x1234
}

我想编写一个返回给定Enum的IEnumerable的方法。

IEnumerable<byte> Foo(MyEnum myEnum){
     //...
}

那样

byte[] bytes = Foo(MyEnum.MyVal1).ToArray(); //bytes == 0x0000
byte[] bytes = Foo(MyEnum.MyVal2).ToArray(); //bytes == 0xF0F0
byte[] bytes = Foo(MyEnum.MyVal3).ToArray(); //bytes == 0x1234

请指教。我正在使用Compact Framework 3.5

1 个答案:

答案 0 :(得分:1)

实际上,您可以使用内置BitConverter.GetBytes来实现此目的:

IEnumerable<byte> Foo(MyEnum myEnum) {          
    return BitConverter.GetBytes((ushort)myEnum);           
}

您可能需要注意的唯一一个关键是将enum转换为ushort,因为enum是2个字节。

另请注意,默认情况下,BitConverter.IsLittleEndian属性后的结果。如果是true,那么结果是小端,如果是false,则结果是大端。