С# почему нельзя присвоить 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;