为什么.NET自然会采用某些类型?
考虑以下代码:为什么.NET自然会采用某些类型?,.net,types,inferred-type,.net,Types,Inferred Type,考虑以下代码: var x = 32; 数字32将适用于sbyte、byte、short、ushort等 为什么.NET假定这是一个int 对于var x=3.2,同样的问题.NET假定double 为什么.NET假定这是一个int 错误的问题/主题。是C编译器假定这是一个int 摘自: 整数文本的类型确定如下: 如果文本没有后缀,则它具有可以表示其值的第一种类型:int、uint、long和ulong 和来自: 如果未指定实数类型后缀,则实数文本的类型为double 编译器的另一个重要“窍门
var x = 32;
数字32将适用于sbyte
、byte
、short
、ushort
等
为什么.NET假定这是一个int
对于var x=3.2,同样的问题
.NET假定double
为什么.NET假定这是一个int
错误的问题/主题。是C编译器假定这是一个int
摘自:
整数文本的类型确定如下:如果文本没有后缀,则它具有可以表示其值的第一种类型:int、uint、long和ulong 和来自: 如果未指定实数类型后缀,则实数文本的类型为double 编译器的另一个重要“窍门”使其合法化:
byte b = 5;
(通常5是一个int
,并且没有从int
到字节的隐式转换),但是:
摘自:
隐式常量表达式转换允许以下转换:
- int类型的常量表达式(第7.15节)可以转换为sbyte、byte、short、ushort、uint或ulong类型,前提是常量表达式的值在目标类型的范围内
- long类型的常量表达式可以转换为ulong类型,前提是常量表达式的值不是负值
为什么.NET假定这是一个int
错误的问题/主题。是C编译器假定这是一个int
摘自:
整数文本的类型确定如下:
如果文本没有后缀,则它具有可以表示其值的第一种类型:int、uint、long和ulong
和来自:
如果未指定实数类型后缀,则实数文本的类型为double
编译器的另一个重要“窍门”使其合法化:
byte b = 5;
(通常5是一个int
,并且没有从int
到字节的隐式转换),但是:
摘自:
隐式常量表达式转换允许以下转换:
- int类型的常量表达式(第7.15节)可以转换为sbyte、byte、short、ushort、uint或ulong类型,前提是常量表达式的值在目标类型的范围内
- long类型的常量表达式可以转换为ulong类型,前提是常量表达式的值不是负值
尝试decimald=3.2代码>,它会产生一个启发性的错误。@HenkHolterman-为什么编译器不能从左边的类型说明符自动推断出这个错误?-如果我没有输入x=32;,它就不会抱怨了?编译器有一个左侧要检查的情况的数量可能重复,这与它尝试评估表达式的结果类型(该表达式不会存储在任何显式变量中)的次数相比要小得多。有不同的规则取决于它是否在处理作业,这会导致语言更加混乱。因此编译器只能使用构成表达式的子表达式的类型来确定其类型代码>,它会产生一个启发性的错误。@HenkHolterman-为什么编译器不能从左边的类型说明符自动推断出这个错误?-如果我没有输入x=32;,它就不会抱怨了?编译器有一个左侧要检查的情况的数量可能重复,这与它尝试评估表达式的结果类型(该表达式不会存储在任何显式变量中)的次数相比要小得多。有不同的规则取决于它是否在处理作业,这会导致语言更加混乱。因此编译器只能使用组成表达式的子表达式的类型来确定其类型。