示例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。
答案 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等),整数文字被认为是int
,uint
,long
或{ {1}},取决于哪个是适合该数字的最小类型。
一些例子:
ulong
答案 3 :(得分:1)
为什么不呢?我相信Int32
最常用。其他数字类型的后缀可以添加到文字值中。 Int32
被选为没有后缀的那个。
如果您希望var
为其他类型,请使用后缀,即
var number = 123f;
将是float
。请参阅here for more info about numeric literals。