为什么.NET自然会假设某些类型?

时间:2016-03-16 10:57:30

标签: .net types inferred-type

请考虑以下代码:

var x = 32;

数字32将适合sbytebyteshortushort等。

为什么.NET认为这是int

var x = 3.2; .NET假设double

的同一问题

1 个答案:

答案 0 :(得分:4)

  

为什么.NET假设这是一个int?

错误的问题/主题。 C#编译器认为这是int

取自2.4.4.2 Integer literals

  

整数文字的类型确定如下:
  如果文字没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,uint,long,ulong。

2.4.4.3 Real literals

  

如果未指定实际类型后缀,则实数的类型为double。

编译器的另一个重要“技巧”,使其成为合法的:

byte b = 5;

(通常5为int,并且没有从intbyte的隐式转换,但是:

取自6.1.6 Implicit constant expression conversions

  

隐式常量表达式转换允许以下转换:

     
      
  • 如果constant-expression的值在目标范围内,则int类型的常量表达式(第7.15节)可以转换为sbyte,byte,short,ushort,uint或ulong类型类型。

  •   
  • 如果constant-expression的值不是负数,则long类型的常量表达式可以转换为ulong类型。

  •