Я использую буферы протокола в .net и генерирую классы C # с помощью protoc.Например, давайте возьмем этот файл proto3 из https://developers.google.com/protocol-buffers/docs/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;
}
}
И что в идеале можно сделать, чтобы одно выражение распространялось на смесь из 5 выражений и операторов.
Есть ли какой-то более аккуратный способ инициализации этих структур, которые я пропускаю?