Это кажется ошибка для меня ...C# Автоматические свойства - все еще null после + =?
Я принимаю, что автоматические свойства, определяемые как например:
public decimal? Total { get; set; }
будет нулевым, когда они первый доступ. Они не были инициализированы, поэтому, конечно, они являются нулевыми.
Но даже после установки их значения через + =, это десятичное число? все еще остается нулевым. Поэтому после:
Total += 8;
Всего по-прежнему не имеет значения. Как это может быть правильно? Я понимаю, что это делает (нуль + 8), но, кажется странным, что он не подхватывает, что это означает, что он должен просто быть установлен на 8 ...
добавлений:
Я сделал «нуль + 8 "в моем вопросе - но заметьте, что он работает со строками. Таким образом, он делает null + «привет» просто отлично и возвращает «привет». Поэтому за кулисами инициализируется строка для строкового объекта со значением «hello». Поведение должно быть одинаковым для других типов, ИМО. Это может быть потому, что строка может принимать значение null в качестве значения, но все же нулевая строка не является инициализированным объектом, правильно?
Может быть, это только потому, что строка не является обнуляемым ...
«Они не были инициализированы, поэтому, конечно, они являются нулевыми». Это суть вашей путаницы. Сначала свойства автоматически назначаются, в этом случае - нулевым. Вы рассуждаете от лжи: свойство не назначено. * Свойство изначально назначено. * В C# нет такой вещи, как «непризнанное свойство». –
Интересное различие. Также интересно, что вы можете найти тысячи примеров людей, ссылающихся на значения «initialized to null» как «uninitialized». Поэтому, возможно, это распространенное заблуждение. Единственное, что мне интересно - если у нас есть эта проблема, когда мы не хотим делать «null + 8 = 8» или «null && true == true», почему это исключение не возникает, когда эти типы вещей сделано? Похоже, что это может помешать некоторым ошибкам отладки. –