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

时间:2011-08-03 14:25:36

标签: c# var implicit-typing

示例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#在使用var时将类型默认为Int32。

4 个答案:

答案 0 :(得分:10)

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

  

在C#中,文字值从编译器接收一个类型。您可以   指定如何通过附加一个字母来输入数字文字   数字的结尾。例如,要指定值4.56   应该被视为一个浮点数,在数字后附加一个“f”或“F” - MSDN

答案 1 :(得分:5)

默认为var的{​​{1}}不是您分配给它的整数文字。

您可以使用后缀Int32表示您正在撰写L数字文字。

答案 2 :(得分:3)

var并非违约。相反,var代替初始化变量的表达式的实际类型。那么,问题是为什么255被视为int?答案是没有类型提示(f,d,m,U,L等),整数文字被认为是intuintlong或{ {1}},取决于哪个是适合该数字的最小类型。

一些例子:

ulong

答案 3 :(得分:1)

为什么不呢?我相信Int32最常用。其他数字类型的后缀可以添加到文字值中。 Int32被选为没有后缀的那个。

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

var number = 123f;

将是float。请参阅here for more info about numeric literals