当我读到隐式类型变量时,我想到了这个问题。 我在互联网上找不到答案所以决定把它放在野兔身上。
假设我使用'var'关键字声明变量。
var i = 10;
编译后,我被编译/处理为'整数'i。
现在,我的问题是为什么'i'没有被编译为'short',因为'i'的值非常小以适应'Short'数据类型;以及为什么它总是编译成'整数'??
答案 0 :(得分:6)
因为C# Specification 2.4.4.2规定如果数字文字没有小数或后缀,则它是int
,uint
,long
或{{1}中最小的一个可以包含它。自然ulong
符合10
所以选择它。
整数文字的类型确定如下:
- 如果文字没有后缀,则它具有这些类型中的第一个,其值可以表示为:int,uint,long,ulong。
C#语言设计者认为即使Int32
适合10
,但使用该变量类型的情况相对较少; Int16
用法将是“现状”。
实际上,如果内存服务,无论如何,C#中都有 no Int32
字面值。您必须明确声明并为Int16
分配值才能获得一个。
有趣的是,我查看了已编译的IL代码并声明Int16
和short s = 10
实际上生成完全相同的IL ...所以现在我想知道如何管理短路;也许它们实际上在CLI中作为32位值进行管理。我很想知道是否是这种情况。