我有以下 protobuf 消息协议:
message TestMsg
{
int32 int = 1;
google.protobuf.Int32Value nullable_int = 2;
repeated google.protobuf.Int32Value nullable_int_array = 3; // Runtime fail
}
protoc 可以很好地编译它,并且在 C# 中所有 Int32Values 都是 int?。但它在运行时失败,带有一个不允许的空参数异常。我可以理解repeated
不允许空消息。但是Int32Value
是 WellKnownType,因此编译器可以在需要时生成特殊的 NullValue 类型。
这是 protobuf 中的限制(不允许Int32Value
in repeated
)还是 C# 代码生成和支持库中的限制/错误?
除了创建自己的消息和 codegen 之外,在 protobuf 协议中执行可为空的 int 数组的选项有哪些?