繁体   English   中英

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

[英]Determine which 'oneof' proto3 field is set in C#

对于以下协议缓冲区消息(proto3),如何确定设置了哪种类型? 似乎没有像生成的C ++版本那样的“ has_reply”方法。

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

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

一个领域

一个中的每个字段都具有单独的属性,例如规则的奇异字段。 但是,编译器还会生成一个附加属性,以确定枚举中已设置哪个字段,以及枚举和清除其中一个的方法。 例如,对于此字段定义

 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”的当前属性,则获取该属性将返回为该属性设置的值。 否则,获取属性将返回属性类型的默认值-一次只能设置oneof的一个成员。

设置oneof的任何构成属性将更改oneof的已报告“案例”。 与常规单数字段一样,您不能将字符串或字节类型的oneof字段设置为空值。 将消息类型字段设置为null等效于调用特定于one的Clear方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM