kyr*_*rre 2 c# protocol-buffers proto3
对于以下协议缓冲区消息(proto3),如何确定设置了哪种类型?似乎没有像生成的C++版本那样的"has_reply"方法.
message Event {
oneof type {
Connection connection = 1;
StatusReply reply = 2;
Error error = 3;
End end = 4;
Empty empty = 5;
};
}
Run Code Online (Sandbox Code Playgroud)
https://developers.google.com/protocol-buffers/docs/reference/csharp-generated#oneof建议TypeOneofCase会告诉您设置了哪个:
Oneof Fields
oneof中的每个字段都有一个单独的属性,就像常规的奇异字段一样.但是,编译器还会生成一个附加属性,以确定枚举中的哪个字段已设置,以及枚举和清除oneof的方法.例如,对于这个字段定义
Run Code Online (Sandbox Code Playgroud)oneof avatar { string image_url = 1; bytes image_data = 2; }编译器将生成这些公共成员:
Run Code Online (Sandbox Code Playgroud)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的报告"case".与常规奇异字段一样,您不能将字符串或字节类型的oneof字段设置为空值.将消息类型字段设置为null等同于调用oneof特定的Clear方法.
| 归档时间: |
|
| 查看次数: |
6481 次 |
| 最近记录: |