c# почему nullable int не может быть присвоено значение null в качестве значения [дубликат]



этот вопрос уже есть ответ здесь:




  • Условное назначение оператора с типами Nullable?

    5 ответов




  • Nullable типы и тернарный оператор: почему'? 10: null ' запрещено? [дубликат]

    9 ответов



объясните, почему nullable int не может быть присвоено значение null, например



int? accom = (accomStr == "noval" ? null  : Convert.ToInt32(accomStr));


что не так с этим кодом?

403   4  

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

    Ничего не найдено.