0

protobuf を使用するのは初めてで、繰り返しフィールド内の特定のアイテムにアクセスする方法があるのだろうかと思います。

すべてのアイテムを反復処理し、アイテム フィールドをチェックして返すメソッドを作成しました (それへのポインターを返すことはできません :( )。

public Appearance findItem(int itemID) {
  foreach (Appearance item in appearances.Object) {
    if (item.Id == itemID) {
      return item;
    }
  }
  return null;
}

一部のラムダ式を使用する find メソッドがないようです。

これを達成する他の方法はありますか?アイテムのコピーではなく、アイテムへのポインターがあれば完璧なので、それを変更すると、完全な繰り返しフィールドを直接書き込むことができます。

4

1 に答える 1

0

アイテムのコピーではなく、アイテムへのポインターがあれば完璧なので、それを変更すると、完全な繰り返しフィールドを直接書き込むことができます。

それはできませんが、代わりに要素のインデックスを返すことができます。繰り返しフィールドが実装されていることを考えると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();
于 2018-06-27T13:58:46.957 に答える