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);
}