如何在Protobuf重复字段中搜索?

时间:2018-06-27 13:48:18

标签: c# protobuf-csharp-port

这是我第一次使用protobuf,我想知道是否有任何方法可以访问重复字段中的特定项目。

我创建了一个方法,该方法将遍历所有项目,检查项目字段,然后将其返回(我无法返回指向它的指针:()。

{{1}}

似乎没有找到使用lambda表达式的方法。

还有其他方法可以实现这一目标吗?如果我可以拥有指向该项目的指针,而不是它的副本,那将是完美的,因此,如果我进行更改,则可以直接编写完整的重复字段。

1 个答案:

答案 0 :(得分:0)

  

如果我可以拥有指向该项目的指针,而不是它的副本,那将是完美的,因此,如果我更改它,则可以直接编写完整的重复字段。

您不能这样做,但是可以返回元素的 index 。鉴于重复字段实现了IEnumerable<T>,您应该能够足够容易地使用LINQ。例如:

// index is an "int?" with a value of null if no items matched the query
var index = repeatedField
    // You could use tuples here if you're using C# 7. That would be more efficient.
    .Select((value, index) => new { value, (int?) index })
    // This is whatever condition you want
    .Where(pair => pair.value.SomeField == "foo")
    .Select(pair => pair.index)
    .FirstOrDefault();