c# почему nullable int не может быть присвоено значение null в качестве значения [дубликат]
этот вопрос уже есть ответ здесь:
Условное назначение оператора с типами Nullable?
5 ответов
Nullable типы и тернарный оператор: почему'? 10: null ' запрещено? [дубликат]
9 ответов
объясните, почему nullable int не может быть присвоено значение null, например
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
что не так с этим кодом?
4 ответов:
проблема не в том, что null не может быть присвоен int?. Проблема заключается в том, что оба значения, возвращаемые тернарным оператором, должны быть одного типа, или одно должно быть неявно преобразовано в другое. В этом случае null не может быть неявно преобразован в int или vice-versus, поэтому необходимо явное приведение. Попробуйте вместо этого:
int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
то, что говорит Гарри S, совершенно верно, но
int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));также будет делать трюк. (Мы Resharper пользователи всегда могут обнаружить друг друга в толпе...)
другой вариант-использовать
int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr);мне это нравится больше всего.
точно так же я делал долго:
myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;
Comments