Литеральный формат c# short/long/int?
в C / c# / etc. вы можете сказать компилятору, что литеральное число не то, что кажется (т. е., float
вместо double
, unsigned long
вместо int
:
var d = 1.0; // double
var f = 1.0f; // float
var u = 1UL; // unsigned long
etc.
может кто-нибудь точка меня в список? Я специально ищу суффикс для short
или Int16
.
5 ответов
var d = 1.0d; // double
var d0 = 1.0; // 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
думаю, это все... нет литеральных спецификаторов для short/ushort/byte / sbyte
с §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
.
если суффикс реального типа не указан, тип реального литерал двойной. В противном случае суффикс реального типа определяет тип реального литерала следующим образом:
- настоящий буквальный суффикс
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
.
Если вы хотите избежать приведений типов, которые часто вызывают предупреждения с resharper,short.Parse("1")
также может быть альтернативой.