Quiero usar un inicializador de colección para el siguiente fragmento de código:
public Dictionary<int, string> GetNames()
{
Dictionary<int, string> names = new Dictionary<int, string>();
names.Add(1, "Adam");
names.Add(2, "Bart");
names.Add(3, "Charlie");
return names;
}
Por lo general, debería ser algo como:
return new Dictionary<int, string>
{
1, "Adam",
2, "Bart"
...
Pero, ¿cuál es la sintaxis correcta para esto?
Respuestas:
fuente
Dictionary<TKey, TValue>
subclases o también funcionaráICollection<KeyValuePair<TKey, TValue>>
?var
lugar del tipo de declaración, o si dejar el tipo de declaración puede omitir elnew Dictio...
- stackoverflow.com/questions/5678216/…var
literalmente solo te ahorra las pulsaciones de teclas, está implícitamente tecleado fuertemente .var
y repetirteSomeType obj = new SomeType...
. Y dado que no puede declararvar obj;
sin inicializar inmediatamente, simplemente no veo el problema. Realmente, estoy tratando de aprender, pero no puedo asimilar tu posición.La sintaxis es ligeramente diferente:
Tenga en cuenta que está agregando tuplas de valores de manera efectiva.
Como nota al margen: los inicializadores de colección contienen argumentos que son básicamente argumentos para cualquier función Add () que sea útil con respecto al tipo de argumento en tiempo de compilación. Es decir, si tengo una colección:
el siguiente código es perfectamente legal:
fuente
IEnumerable
y tengaAdd()
métodos.Add
.IEnumerable<T>
y que tenga unAdd
método. Si elAdd
método toma 3 parámetros, entonces necesitará 3 objetos entre paréntesis.fuente
La pregunta está etiquetada
c#-3.0
, pero para completar, mencionaré la nueva sintaxis disponible con C # 6 en caso de que esté utilizando Visual Studio 2015 (o Mono 4.0):Nota: la sintaxis anterior mencionada en otras respuestas aún funciona, si te gusta más. Nuevamente, para completar, aquí está la sintaxis anterior:
Otra cosa interesante a tener en cuenta es que con cualquier sintaxis puede dejar la última coma si lo desea, lo que facilita copiar / pegar líneas adicionales. Por ejemplo, lo siguiente se compila muy bien:
fuente
Si está buscando una sintaxis un poco menos detallada, puede crear una subclase de
Dictionary<string, object>
(o del tipo que sea) como esta:Entonces solo inicializa así
Que es equivalente a
El beneficio es que obtienes todo el tipo de compilación que podrías desear, como poder decir
is DebugKeyValueDict
en vez deis IDictionary<string, object>
o cambiar los tipos de clave o valor en una fecha posterior. Si está haciendo algo como esto dentro de una página cshtml de razor, es mucho más agradable de ver.
Además de ser menos detallado, por supuesto, puede agregar métodos adicionales a esta clase para lo que desee.
fuente
En el siguiente ejemplo de código, a
Dictionary<TKey, TValue>
se inicializa con instancias de tipoStudentName
.de msdn
fuente
Sí, podemos usar el inicializador de colección en el diccionario.Si tenemos un diccionario como este-
Podemos inicializarlo de la siguiente manera.
fuente