2012-06-12 9 views
16

Tengo la siguiente clase City. Cada objeto de ciudad contiene un diccionario cuyas claves son etiquetas de idioma (digamos: "EN", "DE", "FR" ...) y qué valores son los nombres de las ciudades en los idiomas correspondientes (por ejemplo: Roma/Rom, etc.) .Agregar valores a un diccionario a través de la inicialización en línea de su contenedor

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; } 
    } 
} 

La mayoría de las ciudades tienen los mismos nombres que sea el idioma por lo que el City constructor tiene realmente crea el mapeo Inglés:

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

Aquí viene la pregunta: ¿Hay una manera de añadir el otros valores a través de la inicialización en línea?

Probé diferentes variaciones de las siguientes acciones sin éxito semántica (no se compila):

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

También probé la creación de un nuevo diccionario, pero esto obviamente sobrescribe el "ES" parámetro:

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

¿Alguien sabe si esto es posible?

+0

Nota: * * inicialización del constructor no es la terminología apropiada. Piensa en la inicialización de ** objeto ** y ** colección **, ninguna de las cuales se realiza a través de un constructor. –

+0

tiene razón, he editado el título, gracias –

Respuesta

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

Esto utiliza la sintaxis del inicializador para invocar el método .Add.

+0

Esto sobrescribirá el valor agregado en el constructor, al igual que el último bloque de código proporcionado por el solicitante. – Rawling

+3

No, no lo hará. Se agregará al diccionario existente. No creará uno nuevo. – usr

+0

... Me atrapaste, no lo intenté. Dame un segundo. Si tienes razón, humildemente me disculparé. – Rawling

6

esto es inicialización en línea real:

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