Подтвердить что ты не робот

Как указать короткую константу int без кастинга?

Есть ли способ указать, что моя переменная является коротким int? Я ищу нечто подобное суффиксу М для десятичных знаков. Для десятичных знаков мне не нужно говорить

var d = (decimal)1.23;

Я могу просто написать следующее:

var d = 1.23M;

Есть ли способ написать этот

   var s  = SomeLiteralWithoutCast

так что s подразумевается как short int?

4b9b3361

Ответ 1

Короткий ответ №. В С# нет буквы S, которая может использоваться как var a = 123S, которая указывает, что a имеет тип short. Там L для long, F для float, D для double, M для decimal, , но не S. Было бы неплохо, если бы это было, но нет.

var a = 1M;  // decimal
var a = 1L;  // long
var a = 1F;  // float
var a = 1D;  // double
var a = 1;   // int

var a = 1U;  // uint
var a = 1UL; // ulong

но не

var a = 1S; // not possible, you must use (short)1;

Ответ 2

Вопрос немного запутан. Пусть определим некоторые члены:

Постоянное выражение (грубо говоря) - выражение, известное компилятору как конкретное постоянное значение.

Литерал - это особый вид постоянного выражения; 123 и Math.PI являются постоянными выражениями. Первый - буквальный, последний - нет.

Постоянное поле является членом типа, который инициализируется константным выражением и может затем использоваться как постоянное выражение в другом месте. Math.PI является примером постоянного поля.

Локальная константа как постоянное поле, но привязана к блоку. (Так же, как локальная переменная привязана к блоку.)

Постоянные поля и локальные константы должны явно указывать свой тип; для констант нет формы "var". (Сама идея заставляет дрожать, "const var", очевидно, является оксюмороном.)

Локальные переменные не обязаны указывать свой тип; тип может быть выведен из инициализатора. Такая локальная переменная называется "неявно типизированной локальной переменной".

Итак, ваш вопрос: "Есть ли способ написать литеральное постоянное выражение типа short, которое можно использовать для инициализации неявно типизированной локальной переменной типа short?"

Нет, нет. Вы можете явно ввести локальную переменную:

short s1 = 123;

Вы можете явно ввести локальную константу:

const short s2 = 123;

Или вы можете сделать константное выражение, которое содержит короткое нажатие:

var s3 = (short)123;

Или вы можете создать локальную или полевую константу и использовать ее имя для инициализатора неявно типизированного локального:

var s4 = s2;

Но вокруг нет никакого пути; short должен появиться где-нибудь в поле или локальном объявлении или в листинге.

Ответ 3

Суффикса для типа данных short в С# нет. Если вы хотите, чтобы целочисленный литерал был коротким, вам нужно явно указать тип и предоставить литерал, находящийся в зоне действия.

short s = 123;

Ответ 4

Два варианта; ни идеал:

  • Удалите var, явно указывая тип:

    short s = 123;
    
  • Используйте синтаксис cast (отмечая, что это операция времени компиляции, а не время выполнения):

    var s = (short)123;
    

Это единственные опции для указания буквального короткого замыкания.

Ответ 5

Вы можете использовать следующее:

var value = (short)123;

Конечно, это не имеет смысла, поскольку вся точка var не должна писать тип.

Ответ 6

Нет такой вещи Implicitly const Поэтому вам нужно будет определить свой const как короткий:

const short x = 999;

подробнее здесь