发现用var关键字声明的变量的隐式类型

本文关键字:变量 类型 声明 var 关键字 发现 | 更新日期: 2023-09-27 18:08:41

假设我有以下代码:

var longValue = 2147483650; // Three more than the max int size
var intValue = 10;
var variableOfUnknownType = longValue - intValue;

我想知道variableOfUnkownType是什么类型。(即是variableOfUnknownType.GetType() == System.Int64还是variableOfUnkownType.GetType() == System.Int32 ?)

当然,我可以去仔细阅读关于算术类型转换的c#文档,或者在我的代码中添加一个Console.WriteLine(variableOfUnknownType.GetType());语句来了解这个问题的答案。但是,根据c#的var文档

var关键字指示编译器从初始化语句右侧的表达式推断变量的类型。

这意味着MS Visual Studio应该能够在编译代码之前告诉我变量的类型。

我的问题是:我如何使用MS Visual Studio来告诉我这个特定的var变量的值?

发现用var关键字声明的变量的隐式类型

只需将鼠标悬停在'var'关键字上,它就会告诉您推断的类型

长答:只需将代码替换为var所代表的类型,就可以得到以下代码:

uint longValue = 2147483650; // Three more than the max int size
int intValue = 10;
long variableOfUnknownType = longValue - intValue;
如你所见,这是三种不同的类型,但为什么呢?int有意义。没有必要占用64位,如果你可以对32位做同样的事情,因为这是一个正数,我们可以使用无符号整数。int类型是不言自明的,但是long类型一开始会让人有点困惑。

作为程序员,我们知道int.MaxValue + 3 - 10再次适合int,但编译器不知道。毕竟,他怎么知道intVariable是10呢?很简单:他没有。因此,他推断出他知道的可以处理该值的类型。因为我们在这里做减法,它可能会导致负值,所以他取了符号类型,它可以适合这些值,也就是Int64/long

顺便说一句:这是我的头。我必须再次检查c#中的整数运算才能完全验证这一点。