2009-06-02 2 views
1

Я просто замечаю, что если я передаю значение, такое как 1 в параметре функции, он будет работать, если он исключает int, long и я принимаю остальные. Однако, если я делаю int i = value, это не так. Мне было интересно, какой это тип?В C# какой тип представляют собой целые литералы?

+0

Можете ли вы привести пример кода и ошибку, которую вы видите? –

ответ

4
(1).GetType().ToString() //is System.Int32 
+0

Для полноты оригинального плаката могут понадобиться примеры для «L», «U» и «UL», а может быть? :) – jerryjvl

0

Как я понимаю, компилятор будет использовать тип-намек, чтобы определить тип литерала во время компиляции.

0

Тип определяется.

Если у вас есть эта функция:

public void SomeFunc(long i); 

и вы называете это так:

SomeFunc (1); 

Тогда C# будет видеть это '1' как долго.

3

Вы можете использовать суффиксы буквальных чисел, чтобы сделать тип явно, в противном случае значение будет неявно интерпретируется как если бы это был целевой тип (если он не переполнить цели).

var myLong = 123L; 
var myInt = 123; 
var myByte = (byte)123; // i'm not aware of a suffix for this one 

// unsigned variants 
var myULong = 123UL; 
var myUInt = 123U; 
+0

Что касается байтового суффикса, ваше «неосознание» является обоснованным; нет; o) –

4

Посмотрите на integer literals specification:

тип целого литерала определяется следующим образом:

  • Если буквальное не имеет суффикса, он имеет первый из эти типы, в которых его значение может быть представлено: int, uint, long, ulong.
  • Если буква имеет суффикс U или u, он имеет первый из этих типов , в котором его значение может быть представлено: uint, ulong.
  • Если литаль суффикса L или l, он имеет первый из этих типов , в котором его значение может быть представлено: long, ulong.
  • Если литерал суффикса UL, Ul, uL, ul, LU, Lu, lU или lu, он имеет тип ulong.
+2

Любите свой аватар (точнее, звук, который он представляет). Хороший ответ тоже: o) –

+0

Porcupine Tree - удивительный :) –

0

Целые литералы int по умолчанию, но так как есть неявное преобразование из int в long, вы можете вызвать метод, который взять long с int.