我声明了以下枚举:

public enum AfpRecordId
{
    BRG = 0xD3A8C6,
    ERG = 0xD3A9C6
}

我想从is值中检索枚举对象:
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。
至于性能-在你寻找更快的东西之前,先检查一下简单的东西是否能给你足够好的性能。

07-26 05:42