为什么c#中声明为隐式类型的数字默认为整型?
本文关键字:数字 默认 整型 类型 声明 为什么 | 更新日期: 2023-09-27 18:04:18
例1
var test = Byte.MaxValue;
Console.WriteLine(test + " : " + test.GetType().Name);
Result 255: Byte
示例2var 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。
当你使用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等),整型字量将被认为是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
为什么不呢?我认为Int32
是最常用的。其他数字类型的后缀要添加到文字值中。Int32
被选为没有后缀的。
如果您希望var
为其他类型,请使用后缀,即
var number = 123f;
为float
。有关数字字面值的更多信息,请参阅此处。