我已经声明了以下枚举:
public enum AfpRecordId
{
BRG = 0xD3A8C6,
ERG = 0xD3A9C6
}
我想从值中检索枚举对象:
private AfpRecordId GetAfpRecordId(byte[] data)
{
...
}
调用示例:
byte[] tempData = new byte { 0xD3, 0xA8, 0xC6 };
AfpRecordId tempId = GetAfpRecordId(tempData);
//tempId should be equals to AfpRecordId.BRG
我也想使用 linq 或 lambda,前提是它们能提供更好或相等的性能。
最佳答案
简单:
- 将字节数组转换为
int
(手动或通过创建四字节数组并使用BitConverter.ToInt32
) - 将
int
转换为AfpRecordId
- 如有必要,对结果调用
ToString
(您的主题行建议获取名称,但您的方法签名仅讨论值)
例如:
private static AfpRecordId GetAfpRecordId(byte[] data)
{
// Alternatively, switch on data.Length and hard-code the conversion
// for lengths 1, 2, 3, 4 and throw an exception otherwise...
int value = 0;
foreach (byte b in data)
{
value = (value << 8) | b;
}
return (AfpRecordId) value;
}
您可以使用 Enum.IsDefined
检查给定的数据是否实际上是一个有效 ID。
至于性能 - 在寻找更快的东西之前,检查简单的东西是否能提供足够好的性能。
关于c# - 根据枚举值获取枚举名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7979576/