在c#中我说:
var s = 0;
s
的类型应该是什么?它使它成为int32
。然后似乎var
不适用于short
和其他类型(?)。
答案 0 :(得分:5)
根据C#语言标准,特别是§2.4.4.2 on integer literals:
整数文字的类型确定如下:
- 如果文字没有后缀,则其中第一个类型可以表示其值:
int
,uint
,long
,ulong
。< / LI>- 如果文字后缀为
U
或u
,则其中的第一种类型可以表示其值:uint
,ulong
。- 如果文字后缀为
L
或l
,则其中的第一种类型可以表示其值:long
,ulong
。- 如果文字的后缀为
UL
,Ul
,uL
,ul
,LU
,Lu
,lU
或lu
,类型为ulong
。
第一条规则是需要在这里应用的所有规则。文字0
没有后缀,可以表示为int
类型(或者,在BCL术语中,Int32
),因此它就是它的类型。
正如您可以从上面推断的那样,要更改文字的类型,您可以为其添加后缀。例如,文字0u
的类型为uint
。或者,您可以显式地将文字转换为其他类型;例如:(short)0
会导致编译器将文字视为short
。
答案 1 :(得分:5)
答案 2 :(得分:4)
从规范(第2.4.4.2节):
如果文字没有后缀,则它具有可以表示其值的第一种类型:
int
,uint
,long
,ulong
。< / p>
因此不会自动推断出较小的类型。您可以添加强制转换以强制使用较小的类型:
var s = (short)0;
答案 3 :(得分:2)
C#编译器将类型推断为Int32
。并且您不能隐含地将其投放到short
或byte
,因为它们的尺寸较小,您可能会丢失数据。
如果您希望编译器推断decimal
,您可以:
var s = 0M;