Литералы номер компилятора С#
Кто-нибудь знает полный список модификаторов букв С# компилятора?
По умолчанию объявление '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
Возможно, вы захотите начать с с учетом спецификации языка С#. Большинство типов перечислены там и имеют суффикс:
- L = long
- F = float
- U = uint
- ulong - это немного разные
- m = десятичная (деньги)
- D = double
Конечно, если вы прекратите использовать var, тогда вы обойдете всю проблему, и ваш код станет более читаемым (хорошо, это субъективно, но для чего-то подобного он более читабельен другими людьми:
var x = 0; //whats x?
float x = 0; //oh, it a float
byte x = 0; // or not!