在pb v3中已经可以获取enum的描述文字了
1)定义pb文件 cmd.pb,用extend扩展 EnumValueOptions,此处假定描述字段名为desc;
enum必须从0开始,所以添加一个无意义的Start指令,value为0。
import "google/protobuf/descriptor.proto"; extend google.protobuf.EnumValueOptions { optional string desc = 51234; } //指令列表 enum ComCode { Start = 0 [(desc) = "start"]; Send_ID = 0x01 [(desc) = "触发发送(G2S)"]; Ask_ID = 0x02 [(desc) = "卡号请求帧(S2G)"]; }
2)获取方法,在生成的.cs中,有一个CmdExtensions的类和CmdReflection的类(Cmd为pb的文件名)。
/// <summary>
/// refs:https://github.com/kibblewhite/EnumValueOptions-gRPC-Example
///
/// </summary>
/// <param name="comCode"></param>
/// <returns></returns>
string GetEnumDesc(ComCode comCode)
{
EnumDescriptor CmdEnumDescriptor = CmdReflection.Descriptor.FindTypeByName<EnumDescriptor>(typeof(ComCode).Name);
EnumValueDescriptor enum_value_descriptor = cmdEnumDescriptor.FindValueByNumber((int)comCode);
var enumDescStr = enum_value_descriptor.GetOptions().GetExtension<string>(CmdExtensions.Desc);
return enumDescStr;
}
如此即能获取到enum的desc描述文字。