Добавление значений в словарь через встроенную инициализацию его контейнера - программирование
Подтвердить что ты не робот

Добавление значений в словарь через встроенную инициализацию его контейнера

У меня есть следующий класс City. Каждый объект города содержит словарь, ключи которого являются языковыми тегами (скажем: "EN", "DE", "FR"...) и какие значения являются названиями городов на соответствующих языках (например, Rome/Rom и т.д.),.

public class City:
{
  private IDictionary<string, string> localizedNames = new Dictionary<string, string>(0);
  public virtual IDictionary<string, string> Names
  {
    get { return localizedNames ; }
    set { localizedNames = value; }
  }
}

Большинство городов имеют одинаковые имена независимо от языка, поэтому конструктор City действительно создает английское отображение:

  public City(string cityName)
  {
    this.LocalizedNames.Add("EN", cityName);
  }

Возникает вопрос: есть ли способ добавить другие значения с помощью встроенной инициализации?

Я пробовал разные варианты без семантического успеха (не компилируется):

AllCities.Add(new City("Rome") { Names["DE"] = "Rom" };

Я также попытался создать новый словарь, но это, очевидно, перезаписывает параметр "EN":

AllCities.Add(new City("Rome") { Names = new Dictionary<string, string>() { { "DE", "Rom" } } };

Кто-нибудь знает, возможно ли это?

4b9b3361

Ответ 1

AllCities.Add(new City("Rome") { Names = { { "DE", "Rom" }, { "...", "..." } } });

Это использует синтаксис инициализатора для вызова метода .Add.

Ответ 2

это фактическая встроенная инициализация:

private IDictionary<string, string> localizedNames = new Dictionary<string, string>{
    {"key1","value1"},
    {"key2","value2"}
};