.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
相关产品推荐
相关产品推荐

