Как преобразовать `null` в обнуляемый int? Я всегда получаю 0

2

По причинам, по которым я не буду утомлять вас, у меня есть универсальный объект, значение которого равно 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. Как мне это сделать?

  • 2
    int? bar = (int?)foo; кажется, работает на меня.
  • 0
    Convert.ToInt32() всегда возвращает int , а не null . Это кажется основным недостатком ваших первоначальных попыток. Если вы пойдете к яблоне, вы всегда получите яблоко, а не апельсин.
Показать ещё 2 комментария
Теги:

1 ответ

3
Лучший ответ

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

int? bar = (int?)foo;

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

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

int? bar = foo as int?;

который будет скрывать проблемы конверсии.

  • 0
    Ударь меня к этому секундами.
  • 1
    Великие умы думают одинаково! Или это дураки редко отличаются: D
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню