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