Литералы номер компилятора С#

Кто-нибудь знает полный список модификаторов букв С# компилятора?

По умолчанию объявление '0' делает его Int32 и '0.0' делает его "Double". Я могу использовать буквенный модификатор "f" в конце, чтобы убедиться, что что-то рассматривается как "Single". Например, вот так...

var x = 0;    // x is Int32
var y = 0f;   // y is Single

Какие другие модификаторы я могу использовать? Есть ли способ заставить Double, Decimal, UInt32? Я попробовал погулять за это, но ничего не мог найти. Может быть, моя терминология неверна и поэтому объясняет, почему я начинаю пустую. Любая помощь очень ценится.

Ответ 1

var y = 0f; // y is single
var z = 0d; // z is double
var r = 0m; // r is decimal
var i = 0U; // i is unsigned int
var j = 0L; // j is long (note capital L for clarity)
var k = 0UL; // k is unsigned long (note capital L for clarity)

Из спецификации С#. 2.4.4.2 Целочисленные литералы и 2.4.4.3. Реальные литералы. Обратите внимание, что L и UL предпочтительнее, чем их варианты нижнего регистра для ясности, как рекомендовано Jon Skeet.

Ответ 2

Если вы не хотите их запоминать, тогда компилятор также принимает приведение для той же цели (вы можете проверить IL, что эффект один и тот же, то есть компилятор, а не среда выполнения, делает листинг). Заимствовать предыдущий пример:

    var y = (float)0; // y is single
    var z = (double)0; // z is double
    var r = (decimal)0; // r is decimal
    var i = (uint)0; // i is unsigned int
    var j = (long)0; // j is long
    var k = (ulong)0; // k is unsigned long

И для записи я согласен, что "var" - плохой выбор здесь; Я с удовольствием использую var для SortedDictionary < SomeLongType, SomeOtherLongType > , но для "int" он просто ленив...

Ответ 3

Возможно, вы захотите начать с с учетом спецификации языка С#. Большинство типов перечислены там и имеют суффикс:

Конечно, если вы прекратите использовать var, тогда вы обойдете всю проблему, и ваш код станет более читаемым (хорошо, это субъективно, но для чего-то подобного он более читабельен другими людьми:

var x = 0; //whats x?
float x = 0; //oh, it a float
byte x = 0; // or not!