Я просто замечаю, что если я передаю значение, такое как 1 в параметре функции, он будет работать, если он исключает int, long и я принимаю остальные. Однако, если я делаю int i = value, это не так. Мне было интересно, какой это тип?В C# какой тип представляют собой целые литералы?
ответ
(1).GetType().ToString() //is System.Int32
Для полноты оригинального плаката могут понадобиться примеры для «L», «U» и «UL», а может быть? :) – jerryjvl
Как я понимаю, компилятор будет использовать тип-намек, чтобы определить тип литерала во время компиляции.
Тип определяется.
Если у вас есть эта функция:
public void SomeFunc(long i);
и вы называете это так:
SomeFunc (1);
Тогда C# будет видеть это '1' как долго.
Вы можете использовать суффиксы буквальных чисел, чтобы сделать тип явно, в противном случае значение будет неявно интерпретируется как если бы это был целевой тип (если он не переполнить цели).
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;
Что касается байтового суффикса, ваше «неосознание» является обоснованным; нет; o) –
Посмотрите на integer literals specification:
тип целого литерала определяется следующим образом:
- Если буквальное не имеет суффикса, он имеет первый из эти типы, в которых его значение может быть представлено: int, uint, long, ulong.
- Если буква имеет суффикс U или u, он имеет первый из этих типов , в котором его значение может быть представлено: uint, ulong.
- Если литаль суффикса L или l, он имеет первый из этих типов , в котором его значение может быть представлено: long, ulong.
- Если литерал суффикса UL, Ul, uL, ul, LU, Lu, lU или lu, он имеет тип ulong.
Любите свой аватар (точнее, звук, который он представляет). Хороший ответ тоже: o) –
Porcupine Tree - удивительный :) –
Целые литералы int
по умолчанию, но так как есть неявное преобразование из int
в long
, вы можете вызвать метод, который взять long
с int
.
Можете ли вы привести пример кода и ошибку, которую вы видите? –