.Net - Преобразование или преобразование байта в штучной упаковке? или int? к инт? - PullRequest
1 голос
/ 26 октября 2011

Если у меня есть ссылка object, которая ссылается на byte?, short? или int?, есть ли способ безоговорочно привести или преобразовать ссылку на этот объект в int? без написания отдельного кода для каждого случая?

Например:

byte? aByte = 42; // .. or aByte = null
object anObject = aByte;
//...
var anInt = (int?)anObject //As expected, doesn't work

Ответы [ 2 ]

9 голосов
/ 26 октября 2011

Я бы использовал Convert.ToInt32(object):

object o = ...; // Boxing...
int? x = o == null ? (int?) null : Convert.ToInt32(o);

Обратите внимание, что когда вы ставите int?, short? или byte?, вы всегда получаете нулевую ссылку или значение в штучной упаковке, не обнуляемое - нет такого понятия, как «значение в штучной упаковке» как таковое .

Convert.ToInt32 будет работать для всех упомянутых вами штучных типов - хотя также будет работать для таких вещей, как строка "42" и т. Д. Это проблема?

1 голос
/ 27 октября 2011
var i = (anObject as IConvertible).ToInt32(null);
...