Как указать короткую константу int без кастинга?
Есть ли способ указать, что моя переменная является коротким int?
Я ищу нечто подобное суффиксу М для десятичных знаков. Для десятичных знаков мне не нужно говорить
var d = (decimal)1.23;
Я могу просто написать следующее:
var d = 1.23M;
Есть ли способ написать этот
var s = SomeLiteralWithoutCast
так что s подразумевается как short int?
Ответы
Ответ 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;
подробнее здесь