По причинам, которые я не буду утомлять, у меня есть общий объект, значение которого равно null, и мне нужно преобразовать его в обнуляемое int.

object foo = null
int? bar = Convert.ToInt32(foo) // bar = 0
int? bar = (int?)Convert.ToInt32(foo) // bar = 0
int? bar = Convert.ToInt32?(foo) // not a thing

Из этой темы:

int? bar = Expression.Constant(foo, typeof(int?)); // Can not convert System.Linq.Expression.Constant to int?

Мне нужно, чтобы bar был null. Как мне это сделать?

2
Casey Crookston 9 Ноя 2018 в 01:27

1 ответ

Лучший ответ

Следующее будет работать

int? bar = (int?)foo;

Однако, как указано в комментариях, это вызовет исключение Specified cast is not valid, если foo не является null или int.

Если вы предпочитаете просто получать null, если преобразование недействительно, вы можете использовать

int? bar = foo as int?;

Который скроет проблемы с конвертацией.

3
Loofer 9 Ноя 2018 в 17:09