为什么c#中声明为隐式类型的数字默认为整型?

本文关键字:数字 默认 整型 类型 声明 为什么 | 更新日期: 2023-09-27 18:04:18

例1

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

Result 255: Byte

示例2

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

Result 255: Int32

示例3

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

Result 10: Int32

示例4

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

结果:错误:不能隐式地将类型long转换为int

我的问题是为什么c#在使用var时默认类型为Int32。

为什么c#中声明为隐式类型的数字默认为整型?

当你使用var时,c#不会默认为Int32。当你声明一个整数字面值而不提供类型提示时,c#默认为Int32(只要字面值适合Int32,否则它将转到Int64)。由于文本的类型为Int32,因此var会自动选择该类型:

在c#中,文字值从编译器接收类型。你可以指定数字字面值应该如何键入,方法是将字母附加到号码的结尾。例如,指定值为4.56应被视为浮点数,在数字后面添加"f"或"f"- MSDN

默认为Int32的不是var,而是您分配给它的整数字量

您可以使用后缀L来表示您正在编写Int64数字文字。

var没有默认设置。相反,var代替了初始化变量的表达式的实际类型。那么问题来了,为什么255被认为是int ?答案是,如果没有类型提示(f、d、m、U、L等),整型字量将被认为是intuintlongulong之一,这取决于适合该数字的最小类型。

一些例子:

var i = 255; // var is int
var ui = 4000000000; // var is uint
var l = 5000000000; // var is long
var ul = 9223372036854775808; // var is ulong

为什么不呢?我认为Int32是最常用的。其他数字类型的后缀要添加到文字值中。Int32被选为没有后缀的。

如果您希望var为其他类型,请使用后缀,即

var number = 123f;

float。有关数字字面值的更多信息,请参阅此处。