【问题标题】:Implicitly typed variables initialization at compile time编译时隐式类型变量初始化
【发布时间】:2013-03-27 10:09:38
【问题描述】:

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

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

var i = 10;

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

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

【问题讨论】:

标签: c# compilation var


【解决方案1】:

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

整数字面量的类型确定如下:

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

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

实际上,如果没有记错的话,无论如何,C# 中都有 no Int16 字面量。您必须明确声明并为 Int16 赋值才能获得。


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多