使用 protoc 为 C# 生成代码时,proto 文件中定义的消息中使用的子消息不会标记为可为空(
?
,与 csproj
选项 <Nullable>enable</Nullable>
一起使用)。
我已经看到,即使它们没有标记为可为空,这些属性仍然可以接收意外的
null
对象。
我想知道是否可以要求
protoc
将公开子消息的属性类型声明为可为空。
我尝试在协议中找到一个选项来执行此操作,但失败了。
我期望的是用 C# 生成的代码清楚地表明子消息可以为空:
message Main {
Sub sub = 1;
}
message Sub {
int id = 1;
}
class Main {
Sub? Sub { get; set; }
}
class Sub {
int Id { get; set; }
}
我想知道是否可以要求 protoc 将暴露子消息的属性类型声明为可为空。
目前还没有,没有。
在这方面已经做出了一些努力,但尚未取得任何成果。由于资源有限且在多个方面进行了大量工作,我无法对我们何时可能能够实现它做出任何估计(以及 Google.Protobuf 库的可为空注释)。 您可能需要查看
protoc和 gRPC 插件 的提案 - 如果您订阅这些 PR,那么即使它们没有直接合并,我希望您会看到任何进展的迹象确实发生了。