El código siguiente se compila, pero falla con un NullReferenceException
:compilación C# diccionario inicializador inconsistencia
class Test
{
public Dictionary<string, string> Dictionary { get; set; }
}
static void Main(string[] args)
{
var x = new Test
{
Dictionary = // fails
{
{ "key", "value" }, { "key2", "value2" }
}
};
}
Si reemplaza la línea marcada 'falla' con lo siguiente, que funciona (como se esperaba):
Dictionary = new Dictionary<string, string>
¿Hay algún propósito en la sintaxis fallida? ¿Se puede usar con éxito en algún otro caso? ¿O es esto un descuido en el compilador?
Así se usa para agregar elementos a un diccionario creado por el constructor; debería haberme dado cuenta de eso. Pero es un uso extraño del operador de iguales, ya que el efecto es agregar a lo que ya está en el diccionario (el constructor puede haber agregado elementos primero). –
Más o menos, sí ... pero al mismo tiempo se usa para establecer los valores iniciales en la colección, por lo que encaja de esa manera. –
Derecha. El 'nuevo' faltante debería haber sido una bandera roja ... pero como nunca había usado esta sintaxis, tomé el operador de iguales demasiado literalmente. –