You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中如何从OriginalNameAttribute提取Protobuf枚举原始名称?

获取C# Protobuf枚举的原始名称简便方法

针对你提到的Protobuf生成的带[pbr::OriginalName]属性的C#枚举,有两种简便方法获取原始名称:

1. 自定义反射扩展方法

通过反射读取枚举成员的属性,封装成通用扩展方法,方便调用:

using System;
using System.Reflection;

public static class EnumOriginalNameHelper
{
    public static string GetOriginalName(this Enum enumVal)
    {
        var field = enumVal.GetType().GetField(enumVal.ToString());
        var originalNameAttr = field?.GetCustomAttribute<pbr.OriginalNameAttribute>();
        return originalNameAttr?.OriginalName ?? enumVal.ToString();
    }
}

使用示例:

MyEnum myVal = MyEnum.ThisIsVal2;
string rawName = myVal.GetOriginalName(); // 输出 "THIS_IS_VAL_2"

2. 利用Protobuf内置元数据(推荐)

如果使用的是Google.Protobuf库,直接用内置的枚举描述器获取,无需手动反射,性能更优:

using Google.Protobuf.Reflection;

MyEnum myVal = MyEnum.ThisIsVal1;
var valueDescriptor = MyEnum.Descriptor.FindValueByNumber((int)myVal);
string rawName = valueDescriptor.Name; // 输出 "THIS_IS_VAL_1"

内容的提问来源于stack exchange,提问作者Observer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:07:04