C# 将枚举强制转换为IEnumerable字节

C# 将枚举强制转换为IEnumerable字节,c#,enums,casting,compact-framework,ienumerable,C#,Enums,Casting,Compact Framework,Ienumerable,给定以下枚举 enum MyEnum { MyVal1 = 0x0000, MyVal2 = 0xF0F0, MyVal3 = 0x1234 } 我想为给定的枚举编写一个返回IEnumerable的方法 IEnumerable<byte> Foo(MyEnum myEnum){ //... } 请给我一些建议。我使用的是Compact Framework 3.5实际上,您可以使用内置的位转换器。GetBytes实现此目的: IEnumerable<

给定以下枚举

enum MyEnum {
   MyVal1 = 0x0000,
   MyVal2 = 0xF0F0,
   MyVal3 = 0x1234
}
我想为给定的枚举编写一个返回IEnumerable的方法

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

请给我一些建议。我使用的是Compact Framework 3.5

实际上,您可以使用内置的
位转换器。GetBytes
实现此目的:

IEnumerable<byte> Foo(MyEnum myEnum) {          
    return BitConverter.GetBytes((ushort)myEnum);           
}
IEnumerable Foo(MyEnum MyEnum){
返回BitConverter.GetBytes((ushort)myEnum);
}
在这里,您要注意的唯一关键可能是将
enum
强制转换为
ushort
,因为
enum
是2个字节


另外,请注意,默认情况下,结果将位于
位转换器.IsLittleEndian
属性之后。如果它是
true
,则结果是小尾端,如果它是
false
则结果是大尾端

为什么
Foo
返回
IEnumerable
?不是
字节[]
?这里不太清楚您想要什么。如果
MyVal2
MyVal3
的值大于255,您希望它们返回什么?因为我可能会再次使用linq查询结果。但这并不难。如果您知道一个返回字节[]的解决方案,我也可以接受它。@CharlesMager这正是我需要两个字节的原因。一个字节很容易转换。var myByte=(byte)myEnum;但它不适用于myBytes=(byte[])myEnum;在这种情况下,您可能需要尝试
System.BitConverter.GetBytes
。它很方便
IEnumerable<byte> Foo(MyEnum myEnum) {          
    return BitConverter.GetBytes((ushort)myEnum);           
}