Шаблон хранилища с управляемым доменом дизайном стал анти-шаблоном? [закрыто]

Компилятор имеет неявное преобразование из выражения constant в различные примитивные типы (до тех пор, пока значение находится в соответствующем диапазоне), но здесь выражение не является постоянным - это просто int выражение. Это в значительной степени то же самое, что:

short s;
s = CallSomeMethodReturningInt32();

в отношении компилятора.

Есть два варианта: вы можете наложить целое выражение или отбросить каждую из последних два операнда:

short s = (EitherTrueOrFalse()) ? (short) 0 : (short) 1;

, чтобы создать общий тип выражения short. В этом конкретном случае очень жаль, что не существует числового суффикса литерала для явного объявления литерала short. По-видимому, разработчики языка это рассматривали, но считали, что это относительно редкая ситуация. (Я думаю, что, вероятно, соглашусь.)

Часть о неявных константных конверсиях из раздела спецификации C # 3.0 6.1.8:

6.1.8 Неявное постоянное выражение конверсии

Неявное преобразование константных выражений допускает следующие преобразования:

  • Константное выражение (§7.18) типа int может быть преобразованные в тип sbyte, byte, short, ushort, uint или ulong, если значение константного выражения находится в пределах диапазона типа назначения.
  • Константное выражение типа типа long может быть преобразовано в тип ulong, если значение константного выражения не является отрицательным .
13
задан Melebius 7 December 2016 в 06:32
поделиться