С# почему нельзя присвоить nullable int значение null в качестве значения
Объясните, почему nullable int не может быть присвоено значение null, например
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
Что не так с этим кодом?
Ответы
Ответ 1
Проблема заключается не в том, что null нельзя присвоить int. Проблема в том, что оба значения, возвращаемые тернарным оператором, должны быть одного и того же типа, или один должен быть неявно конвертируемым в другой. В этом случае значение null не может быть неявно преобразовано в int или наоборот, поэтому требуется листинг. Вместо этого попробуйте:
int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
Ответ 2
Что Гарри С говорит точно, но
int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));
также сделал бы трюк. (Мы, пользователи Resharper, всегда можем видеть друг друга в толпе...)
Ответ 3
Другой вариант - использовать
int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr);
Мне нравится это больше всего.
Ответ 4
Точно так же я сделал долго:
myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;