С# short/long/int literal формат?
В C/С#/и т.д. вы можете сообщить компилятору, что литеральный номер не является тем, чем он кажется (т.е. float
вместо double
, unsigned long
вместо int
:
var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long
и др.
Может ли кто-нибудь указать мне на список? Я специально ищу суффикс для short
или Int16
.
Ответы
Ответ 1
var d = 1.0d; // double
var d1 = 1e+3; // double
var d2 = 1e-3; // double
var f = 1.0f; // float
var m = 1.0m; // decimal
var i = 1; // int
var ui = 1U; // uint
var ul = 1UL; // ulong
var l = 1L; // long
Я думаю, что все... для краткости /ushort/byte/sbyte
нет литерала спецификаторов.
Ответ 2
От §2.4.4.2 Целочисленные литералы:
Тип целочисленного литерала определяется следующим образом:
- Если литерал не имеет суффикса, он имеет первый из этих типов, в котором может быть представлено его значение:
int
, uint
, long
, ulong
. - Если литерал имеет суффикс
U
или U
, он имеет первый из этих типов, в котором может быть представлено его значение: uint
, ulong
. - Если литерал суффикс
L
или L
, он имеет первый из этих типов, в котором его значение может быть представлено: long
, ulong
. - Если литерал суффикс
UL
, UL
, UL
, UL
, LU
, LU
, LU
или LU
, он имеет тип ulong
.
И из §2.4.4.3 Реальные литералы:
Если суффикс реального типа не указан, тип реального литерала двойной. В противном случае суффикс реального типа определяет тип реального литерала следующим образом:
- Действительный литерал, суффикс которого
F
или F
имеет тип float
. Например, литералы 1f
, 1.5f
, 1e10f
и 123.456F
являются типами float
. - Действительный литерал, суффикс которого
D
или D
имеет тип double
. Например, литералы 1d
, 1.5d
, 1e10d
и 123.456D
являются типами double
. - Действительный литерал, суффикс которого
M
или M
имеет тип decimal
. Например, литералы 1m
, 1.5m
, 1e10m
и 123.456M
имеют тип decimal
. Этот литерал преобразуется в десятичное значение путем принятия точного значения и, при необходимости, округления до ближайшего представимого значения с использованием округления банкира (раздел 4.1.7). Любая шкала, видимая в литерале, сохраняется, если значение не округлено или значение равно нулю (в последнем случае знак и масштаб будут равны 0). Следовательно, литерал 2.900m
будет анализироваться с образованием десятичной дроби со знаком 0
, коэффициентом 2900
и шкалой 3
.
Ответ 3
Если ваша переменная еще не короткая, вы должны явно ее указать:
Object s = (Int16) 1;
Ответ 4
Нет короткого слова. Просто используйте short s = 1;
.
Ответ 5
Если вы хотите избежать приведения типов, которые часто вызывают предупреждения с помощью resharper, short.Parse("1")
также может быть альтернативой.