Почему число, объявленное как неявный тип, по умолчанию является целым числом в C #? - PullRequest
4 голосов
/ 03 августа 2011

Пример 1

var test = Byte.MaxValue;
Console.WriteLine(test + " : " + test.GetType().Name);

Результат 255: Байт

Пример 2

var test = 255;
Console.WriteLine(test + " : " + test.GetType().Name);

Результат 255: Int32

Пример 3

var test = 10;
Console.WriteLine(test + " : " + test.GetType().Name);

Результат 10: Int32

Пример 4

var test = 255;
test = Int64.MaxValue;  
Console.WriteLine(test + " : " + test.GetType().Name);

Результат: Ошибка: невозможно неявное преобразование типа long в int

Мой вопрос: почему в C # по умолчанию используется тип Int32 при использовании var.

Ответы [ 4 ]

10 голосов
/ 03 августа 2011

C # не по умолчанию Int32, только когда вы используете var. В C # по умолчанию используется Int32, когда вы объявляете целочисленный литерал без указания подсказки типа (до тех пор, пока литерал помещается в Int32, в противном случае он переходит к Int64). Поскольку литерал набирается как Int32, переменная автоматически выбирает этот тип:

В C # литеральные значения получают тип от компилятора. Вы можете указать способ ввода числового литерала, добавив в конец числа. Например, чтобы указать, что значение 4.56 следует рассматривать как число с плавающей точкой, после номера добавьте «f» или «F» - MSDN

5 голосов
/ 03 августа 2011

Это не var, по умолчанию Int32, это целочисленный литерал, который вы ему присваиваете.

Вы можете использовать суффикс L, чтобы указать, что вы пишете Int64 числовой литерал.

3 голосов
/ 03 августа 2011

var не по умолчанию ни к чему. Вместо этого var стоит вместо фактического типа выражения, которое инициализирует переменную. Тогда возникает вопрос: почему 255 считается int? Ответ заключается в том, что без подсказки типа (f, d, m, U, L и т. Д.) Целочисленные литералы считаются одним из int, uint, long или ulong, в зависимости от того, какой это наименьший тип, который будет соответствовать числу.

Некоторые примеры:

var i = 255; // var is int
var ui = 4000000000; // var is uint
var l = 5000000000; // var is long
var ul = 9223372036854775808; // var is ulong
1 голос
/ 03 августа 2011

Почему бы и нет?Int32 используется чаще всего, я верю.Другие числовые типы имеют свои суффиксы для добавления к литеральным значениям.Int32 было выбрано как без суффикса.

Если вы хотите, чтобы var был другого типа, используйте суффикс, то есть

var number = 123f;

будет float.См. здесь для получения дополнительной информации о числовых литералах .

...