c # распаковка через объект - PullRequest
0 голосов
/ 01 октября 2018

Я могу без проблем разыграть byte на int.

byte a = 2;
int b = a;      // => unboxing, boxing or conversion?

Когда я разыгрываю byte сначала на object, а затем на int, я получаю InvalidCastException.

byte a = 2;
object b = a;    // => boxing?
int c = (int) b; // => unboxing fails?

Но я могу обойти эту проблему, используя Convert.ToInt32.

byte a = 2;
object b = a;                // => boxing?
int c = Convert.ToInt32(b);  // => what happens here?

  • Почему я получаю InvalidCastException во втором примере?
  • Что означает Convert.ToInt32 в фоновом режиме?
  • Правильно ли я пометил boxing, unboxing и conversion?/ Какой правильный термин, когда в примерах, где я не уверен?
  • Здесь задействованы операторы преобразования?Есть ли обзор основных операторов преобразования базовых типов?

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

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Почему я получаю InvalidCastException во втором примере?

Вы можете распаковать только в исходном типе

Что делает Convert.ToInt32 в фоновом режиме?

Содержит преобразование

Правильно ли я пометил бокс, распаковку и преобразование?/ Какой правильный термин, когда в примерах, где я не уверен?

byte a = 2;
int b = a;      // convertation (byte to int)

object b = a;    // boxing
int c = (int) b; //unboxing

object b = a;                // boxing
int c = Convert.ToInt32(b);  // convertation (object to int)

Здесь задействованы операторы преобразования?Есть ли обзор основных операторов преобразования базовых типов?

Вы можете отразить код фреймворка, чтобы узнать, как он работает глубже.

0 голосов
/ 11 декабря 2018

должно быть

object b = a;    // => boxing
int c = (int) b;  //Un-boxing
0 голосов
/ 01 октября 2018

Почему я получаю InvalidCastException во втором примере?

Поскольку вы указали, что хотите разыграть (и в то же время распаковать) тип (в штучной упаковке)переменная к чему-то еще.И здесь не определен встроенный, неявный или явный оператор преобразования, поэтому он завершается неудачей.

Что означает Convert.ToInt32 в фоновом режиме?

Это. Для преобразования используется интерфейс IConvertible.

Правильно ли я пометил бокс, распаковку и преобразование?/ Какой правильный термин, когда в примерах, в которых я не уверен?

int b = a;      // => conversion
object b = a;    // => boxing
int c = (int) b; // => casting fails
int c = Convert.ToInt32(b);  // => what happens here: a method call that happens to do a conversion

Здесь задействованы операторы преобразования?Есть ли обзор основных операторов преобразования основных типов?

Да, хотя и определено в CLR.

...