1

私は .net でプロトコル バッファを使用しており、protoc を使用して C# クラスを生成しています。たとえば、https : //developers.google.com/protocol-buffers/docs/proto3 からこの proto3 ファイルを取得してみましょう。

message SearchResponse {
  repeated Result results = 1;
}

message Result {
  string url = 1;
  string title = 2;
  repeated string snippets = 3;
}

そして、生成された C# クラスを初期化してみましょう。

彼らはこのように見えます

public class SearchResponse
{
    public RepeatedField<Result> Results { get; } = new RepeatedField<Result>();
}

public class Result
{
    public string Url { get; set; }
    public string Title { get; set; }
    public RepeatedField<string> Snippets { get; } = new RepeatedField<string>();
}

これを初期化してみましょう。理想的には、次のようなことができるようになりたいと思います。

SearchResponse GetSearchResponse => new SearchResponse
{
    Results = new RepeatedField<SearchResponse>
    {
        new Result
        {
            Url = "..."
            Title = "..."
            Snippets = new RepeatedField<string> {"a", "b", "c"}
        }
    }
};

ただし、コレクションにはセッターがないため、代わりに複数の式でこれを初期化する必要があります。

SearchResponse GetSearchResponse
{
    get
    {
        var response = new SearchResponse();
        var result = new Result
        {
            Url = "..."
            Title = "..."
        }
        result.Snippets.AddRange(new[]{"a", "b", "c"});
        response.Results.Add(result);
        return response;
    }
}

そして、理想的には 1 つの式を使用することが、5 つの式とステートメントの混合物に分散されます。

私が見逃しているこれらの構造を初期化するためのより良い方法はありますか?

4

1 に答える 1