Я бы использовал Convert.ToInt32(object)
:
object o = ...; // Boxing...
int? x = o == null ? (int?) null : Convert.ToInt32(o);
Обратите внимание, что когда вы ставите int?
, short?
или byte?
, вы всегда получаете нулевую ссылку или значение в штучной упаковке, не обнуляемое - нет такого понятия, как «значение в штучной упаковке» как таковое .
Convert.ToInt32
будет работать для всех упомянутых вами штучных типов - хотя также будет работать для таких вещей, как строка "42" и т. Д. Это проблема?