将 RepeatedField 转换为列表

问题描述 投票:0回答:3

.Net

我的protobuf文件:

message Result{
    repeated ListOfStrings lists = 1;
}

message ListOfStrings {
    repeated string strings = 1;
}

我有一个具有此属性的类:

public List<List<string>> ListOfLists { get; set; }

Protobuf 编译器生成

RepeatedField
集合,当我尝试将此集合传递给
ListOfLists.AddRange()
时,我收到此错误:

cannot convert from 'Google.ProtobufCollections.RepeatedField<gRPC.ListOfStrings>' to 'System.Collection.Generic.IEnumerable<System.Collections.Generic.List<string>>

如何处理?

.net protocol-buffers grpc protobuf-net protobuf-csharp-port
3个回答
3
投票

A

List<List<string>>
字符串的事物列表不同。您可能需要:

foreach (var list in outerList) {
    var inner = new ListOfStrings();
    inner.Strings.AddRange(list);
    obj.Lists.Add(inner);
}

0
投票

你可以尝试一下

CopyTo
的方法吗,doc

示例伪代码:

 Result result = ...
 foreach(var list in result.list)
 {
    string[] arr = new string[list.Count];
    list.CopyTo(arr,0);
    ListOfLists.Add(arr.ToList());
 }

0
投票

使用 C# 范围运算符,您可以简单地编写如下内容:

List<TargetType> list = [.. result.Lists];

其中 result.Lists 的类型为 RepeatedField

© www.soinside.com 2019 - 2024. All rights reserved.