c# - 根据枚举值获取枚举名称

标签 c# .net linq c#-4.0 enums

我已经声明了以下枚举:

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/

相关文章:

ASP.NET 如何检索页面上的空标签列表?

c# - 为什么 Task<HttpResponseMessage> 在我的项目中不可等待?

c# - 将 UI 从 CLI 更改为 WPF

c# - 如何确定 GC.AddMemoryPressure() 的适当参数?

Python 相当于 LINQ All 函数?

c# - Linq to SQL 按 2 个实体(父子)中的字段排序

c# - 为可空 bool 值编写代码的简洁方法

C# 在桌面上保存txt文件

c# - 以最佳性能将数据插入 SQL Server

c# - 为什么 if 条件不检查空值