По причинам, по которым я не буду утомлять вас, у меня есть универсальный объект, значение которого равно null
, и мне нужно преобразовать его в обнуляемое целое число.
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
. Как мне это сделать?
Следующее будет работать
int? bar = (int?)foo;
Однако, как указано в комментариях, это приведет к тому, что Specified cast is not valid
исключением, если foo
- это что-то кроме null
или int
.
Если вы предпочитаете просто получить null
если преобразование недействительно, вы можете использовать
int? bar = foo as int?;
который будет скрывать проблемы конверсии.
int? bar = (int?)foo;
кажется, работает на меня.Convert.ToInt32()
всегда возвращаетint
, а неnull
. Это кажется основным недостатком ваших первоначальных попыток. Если вы пойдете к яблоне, вы всегда получите яблоко, а не апельсин.