请考虑以下代码:
var x = 32;
数字32将适合sbyte
,byte
,short
,ushort
等。
为什么.NET认为这是int
?
var x = 3.2;
.NET假设double
答案 0 :(得分:4)
为什么.NET假设这是一个int?
错误的问题/主题。 C#编译器认为这是int
。
整数文字的类型确定如下:
如果文字没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,uint,long,ulong。
如果未指定实际类型后缀,则实数的类型为double。
编译器的另一个重要“技巧”,使其成为合法的:
byte b = 5;
(通常5为int
,并且没有从int
到byte
的隐式转换,但是:
取自6.1.6 Implicit constant expression conversions:
隐式常量表达式转换允许以下转换:
如果constant-expression的值在目标范围内,则int类型的常量表达式(第7.15节)可以转换为sbyte,byte,short,ushort,uint或ulong类型类型。
如果constant-expression的值不是负数,则long类型的常量表达式可以转换为ulong类型。