С# 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") также может быть альтернативой.