当我阅读隐式类型变量时,我想到了这个问题。我在互联网上找不到答案,所以决定把它放在兔子身上。
假设我使用 '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 位值进行管理的。我很想知道是否是这种情况。