C # литералы номера компилятора - PullRequest
32 голосов
/ 03 октября 2008

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

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

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

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

Ответы [ 3 ]

55 голосов
/ 03 октября 2008
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)

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

12 голосов
/ 03 октября 2008

Если вы не хотите запоминать их, то компилятор также принимает приведение для той же цели (вы можете проверить 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 , но для «int» это просто ленивый ...

5 голосов
/ 03 октября 2008

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

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

var x = 0; //whats x?
float x = 0; //oh, it's a float
byte x = 0; // or not!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...