Как указать короткий литерал int без приведения? - PullRequest
68 голосов
/ 29 декабря 2011

Есть ли способ указать, что моей переменной является короткое int?Я ищу что-то похожее на суффикс M для десятичных чисел.Для десятичных дробей мне не нужно говорить

var d = (decimal)1.23;

Я могу просто написать следующее:

var d = 1.23M;

Есть ли способ написать это

   var s  = SomeLiteralWithoutCast

так что s подразумевается как короткий int?

Ответы [ 6 ]

115 голосов
/ 29 декабря 2011

Краткий ответ, Нет .В C # нет буквы S, которая могла бы использоваться как var a = 123S, которая указала бы, что a имеет тип short.L для long, F для float, D для double, M для decimal, , но не S.Было бы хорошо, если бы было, но нет.

var a = 1M;  // decimal
var a = 1L;  // long
var a = 1F;  // float
var a = 1D;  // double
var a = 1;   // int

var a = 1U;  // uint
var a = 1UL; // ulong

, но не

var a = 1S; // not possible, you must use (short)1;
24 голосов
/ 29 декабря 2011

Вопрос немного сбивает с толку.Давайте определим некоторые термины:

A константное выражение - это (грубо говоря) выражение, известное компилятору как конкретное значение константы.

A literal - это особый вид константного выражения;123 и Math.PI являются константными выражениями.Первый является литералом, а последний - нет.

A константное поле является членом типа, который инициализируется с помощью константного выражения, а затем может использоваться в качестве константного выражения в другом месте.,Math.PI является примером постоянного поля.

A локальная постоянная подобна постоянному полю, но ограничена блоком.(Так же, как локальная переменная находится в блоке.)

Поля констант и локальные константы необходимы для явного определения их типа;не существует формы "var" для констант.(Сама идея заставляет вздрогнуть; «const var», очевидно, является оксюмороном.)

Локальные переменные не обязаны указывать их тип;тип может быть выведен из инициализатора.Такая локальная переменная называется «неявно типизированная локальная переменная».

Итак, ваш вопрос «есть ли способ написать выражение литеральной константы типа short, которое можно использовать для инициализации неявно типизированной локальной переменнойтипа коротко? "

нет, нет.Вы можете явно ввести локальную переменную:

short s1 = 123;

Вы можете явно ввести локальную константу:

const short s2 = 123;

Или вы можете сделать выражение константы, которое содержит приведение к короткому:

var s3 = (short)123;

Или вы можете сделать локальную или полевую константу и использовать ее имя для инициализатора неявно типизированного локального:

var s4 = s2;

Но нет никакого способа обойти это;short должен появиться где-то , либо в поле, либо в локальной декларации, либо в приведении.

9 голосов
/ 29 декабря 2011

Нет суффикса для типа данных short в C #. Если вы хотите, чтобы целочисленный литерал был коротким, вам нужно явно указать тип и указать литерал, который находится в диапазоне.

short s = 123;
8 голосов
/ 29 декабря 2011

Два варианта; ни идеал:

  1. Удалите var, указав тип явно:

    short s = 123;
    
  2. Используйте синтаксис приведения (отметив, что это операция во время компиляции, а не во время выполнения):

    var s = (short)123;
    

Это единственные варианты указания буквального короткого замыкания.

2 голосов
/ 29 декабря 2011

Вы можете использовать следующее:

var value = (short)123;

Конечно, это не имеет смысла, поскольку весь смысл var не в том, чтобы писать тип.

0 голосов
/ 29 декабря 2011

Нет такой вещи Implicitly const Так что вам придется определить ваше const как короткое, как это:

const short x = 999;

подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...