确定哪一个' proto3字段在C#中设置

时间:2017-08-31 10:11:26

标签: c# protocol-buffers proto3

对于以下协议缓冲区消息(proto3),如何确定设置了哪种类型?似乎没有" has_reply"与生成的C ++版本的情况一样。

message Event {
  oneof type {
    Connection connection = 1;
    StatusReply reply = 2;
    Error error = 3;
    End end = 4;
    Empty empty = 5;
  };
}

1 个答案:

答案 0 :(得分:5)

https://developers.google.com/protocol-buffers/docs/reference/csharp-generated#oneof建议TypeOneofCase会告诉您设置了哪个:

  

Oneof Fields

     

oneof中的每个字段都有一个单独的属性,就像常规属性一样   奇异的领域。但是,编译器还会生成一个额外的   用于确定枚举中哪个字段已设置的属性,以及   枚举和清除oneof的方法。例如,对于这个   字段定义

oneof avatar {
  string image_url = 1;
  bytes image_data = 2;
}
     

编译器将生成这些公共成员:

enum AvatarOneofCase
{
  None = 0,
  ImageUrl = 1,
  ImageData = 2
}

public AvatarOneofCase AvatarCase { get; }
public void ClearAvatar();
public string ImageUrl { get; set; }
public ByteString ImageData { get; set; }
     

如果属性是当前的" case",则获取该属性将是   返回为该属性设置的值。否则,抓取   property将仅返回属性类型的默认值   一个人中的一个成员可以一次设置。

     

设置oneof的任何组成属性将更改报告的内容   "壳体"一个人的。与常规奇异场一样,您无法设置   一个字段,字符串或字节类型为空值。设置一个   message-type字段为null等效于调用oneof-specific   清晰的方法。