Приведение C# к типу, допускающему значение NULL?

За пределамиобычной скучной разницы между Литыми Как

  • , если я знаю, что яблокоявляется Фруктом, поэтому я могу использовать (Fruit)apple- и он выдает исключение, если это не так
  • , поскольку значение можно проверить на нуль, чтобы увидеть, удалось ли [не будет генерировать исключение.. .]

Однако я читал статью @EricLippert об этом, и там был хороший пример о типах значений Nullable :

short? s = (short?)123;
int? i = s as int?;

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

] Не удается преобразовать тип «короткий?» на «инт?» через преобразование ссылки, преобразование упаковки, преобразование распаковки, преобразование упаковки или преобразование нулевого типа

. Хорошо.

Так почему же это:

    short? s = (short?)123;
    int? i = (int?)s;

Компилируется ли? ( Вопреки ВСЕМУ ожиданию! Я ЗНАЮ, что sне является int?- и это должно быть БАХ, но это не так...)

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

Мне неудобно спрашивать об этой широко обсуждаемой теме.

Заранее спасибо.

29
задан Royi Namir 8 April 2012 в 18:51
поделиться