3

当我阅读隐式类型变量时,我想到了这个问题。我在互联网上找不到答案,所以决定把它放在兔子身上。

假设我使用 'var' 关键字声明了一个变量。

var i = 10;

编译后, i 被编译/视为“整数” i。

现在,我的问题是为什么“i”没有被编译为“short”,因为“i”的值非常小,无法适应“Short”数据类型;为什么它总是编译为'Integer'?

4

1 回答 1

6

因为C# 规范 2.4.4.2规定,如果数字文字没有小数或后缀,则它是int, uint,longulong可以包含它的最小值。自然10适合Int32所以选择它。

整数文字的类型确定如下:

  • 如果字面量没有后缀,则它具有可以表示其值的第一种类型:int、uint、long、ulong。

C# 语言设计者决定,即使10可以适合 ,Int16该变量类型的使用也相对较少;这种Int32用法将是“现状”。

实际上,如果没有记错的话,C# 中无论如何都没有 Int16文字。您必须显式声明并为 an 分配一个值Int16才能得到一个。


有趣的是,我查看了编译后的 IL 代码并声明了 ashort s = 10int i = 10实际生成了完全相同的 IL ......所以现在我想知道如何管理 short ;也许它们实际上是在 CLI 中作为 32 位值进行管理的。我很想知道是否是这种情况。

于 2013-03-27T10:11:52.190 回答