gpt4 book ai didi

c# - 使用 Protocol Buffer 模拟泛型

转载 作者:行者123 更新时间:2023-11-30 16:10:21 25 4
gpt4 key购买 nike

我有一个存储和操作一些实体的类。根据输入的数量,我可能无法将实体存储在内存中,因此我尝试序列化我的对象以使用 Protocol Buffer 写入硬盘。我正在使用 C# 和 protobuf-csharp-port .我知道 protobuf-net作为替代端口;到目前为止,我一直在使用第一个选项,但如果需要根据我的需要进行更改,我愿意接受更改。

要序列化的类的简化形式如下:

class Entity<T> where T: IComparable<T>
{
int id;
T metaData;
}

所以在编译时我对 metaData 没有任何线索。谷歌搜索我注意到扩展是正确的路径(如 google's pagethis question 所建议);因此,我为 Entity 类定义了 Entity.proto 文件,如下所示:

message Entity
{
required int32 id = 1 [default = 0];
extensions 2 to max;
}

并且我希望用户为 T 提供他自己的 .proto 文件,而无需访问或重新编译 Entity.proto。对此,我的问题是:

  1. 我需要更改 Entity.proto 吗?
  2. T.proto 应该是什么?
  3. 如何在我的 C# 代码中访问 T

最佳答案

使用该方案,任何扩展都将成为非通用 Entity子值(不是子类) .这听起来不像泛型,但最终存储(序列化)通常与实现(Entity<T> 等)完全不同。如果您可以在它们之间手动访问:很好。但这不是图书馆会提供的东西,AFAIK。

为了完整起见,在 protobuf-net 术语中:Entity<T> 完全没问题- 它基本上将每个( Entity<Foo>Entity<Bar> 等)视为完全独立的消息。 Protobuf-net 并没有受到 .proto 模式的强烈插入(尽管为了完整性提供了代码生成工具)——它主要使用运行时元数据。

关于c# - 使用 Protocol Buffer 模拟泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com