Este parece ser un error para mí ...C# Propiedades automáticas: ¿sigue siendo nulo después de + =?
acepto que las propiedades automáticas, que se define como tal:
public decimal? Total { get; set; }
será nula cuando se accede a ellos en primer lugar. No se han inicializado, por lo que son nulos.
Pero, incluso después de establecer su valor a través de + =, este decimal? sigue siendo nulo. Así que después de:
Total += 8;
Total sigue siendo nulo. ¿Cómo puede ser esto correcto? Entiendo que está haciendo un (null + 8), pero parece extraño que no recoge que significa que sólo se debe establecer en 8 ...
Adiciones:
me hizo la "nula + 8 "punto en mi pregunta, pero tenga en cuenta que funciona con cadenas. Por lo tanto, null + "hola" bien, y devuelve "hola". Por lo tanto, detrás de escena, está inicializando la cadena a un objeto de cadena con el valor de "hola". El comportamiento debe ser el mismo para los otros tipos, IMO. Puede ser porque una cadena puede aceptar un valor nulo como valor, pero aún así, una cadena nula no es un objeto inicializado, ¿correcto?
tal vez es sólo porque una cadena no es un anulable ...
"No han sido inicializado, así que por supuesto son nulas." Este es el quid de tu confusión. Las propiedades se asignan inicialmente de forma automática, en este caso, a nulo. Estás razonando desde una falsedad: que la propiedad no está asignada. * La propiedad se asignó inicialmente. * No existe una "propiedad no asignada" en C#. –
distinción interesante. También es interesante que haya miles de ejemplos de personas que se refieren a valores "inicializados a nulos" como "no inicializados". Entonces quizás es un error común. Una cosa que me produce curiosidad: si tenemos este problema en el que no queremos hacer "null + 8 = 8" o "null && true == true", ¿por qué una excepción no se lanza cuando estos tipos de cosas están hechas? Parece que eso podría evitar algunos errores difíciles de depurar. –