C#发现用var关键字声明的隐式变量类型
假设我有以下代码:C#发现用var关键字声明的隐式变量类型,c#,visual-studio,var,C#,Visual Studio,Var,假设我有以下代码: var longValue = 2147483650; // Three more than the max int size var intValue = 10; var variableOfUnknownType = longValue - intValue; uint longValue = 2147483650; // Three more than the max int size int intValue = 10; long variableOfUnknown
var longValue = 2147483650; // Three more than the max int size
var intValue = 10;
var variableOfUnknownType = longValue - intValue;
uint longValue = 2147483650; // Three more than the max int size
int intValue = 10;
long variableOfUnknownType = longValue - intValue;
我想知道UnkownType的类型是什么。(即是variableOfUnknownType.GetType()==System.Int64
或variableOfUnknownType.GetType()==System.Int32
?)
当然,我可以去仔细阅读关于算术类型转换的C#文档,或者添加一个Console.WriteLine(variableOfUnknownType.GetType())代码>对我的代码的声明以了解此问题的答案。然而,根据
var关键字指示编译器从初始化语句右侧的表达式推断变量的类型
这意味着微软VisualStudio应该能够在编译代码之前告诉我变量的类型
我的问题是:
如何使用MS Visual Studio来告诉我这个特定var
变量的值?只需将鼠标悬停在'var'关键字上,它就会告诉您推断出什么类型只需将鼠标悬停在'var'关键字上,它就会告诉您推断出什么类型tl;博士答复
将鼠标悬停在“var”上,您会看到类型(提示它是Int64/long)
长答覆:
只需将代码替换为var表示的类型,即可得到以下代码:
var longValue = 2147483650; // Three more than the max int size
var intValue = 10;
var variableOfUnknownType = longValue - intValue;
uint longValue = 2147483650; // Three more than the max int size
int intValue = 10;
long variableOfUnknownType = longValue - intValue;
正如你所见,这是三种不同的类型,但为什么呢?这是有道理的。不需要占用64位,如果您可以对32位执行相同的操作,并且由于这是一个正数,我们可以使用无符号整数。
int是不言自明的,但是long一开始有点混乱
作为程序员,我们知道int.MaxValue+3-10同样适用于int
,但编译器不知道这一点。毕竟,他怎么知道intVariable
是10?很简单:他没有。因此,他推断出他知道可以处理该值的类型。因为我们在这里进行减法,它可能会导致负值,所以他采用有符号类型,可以拟合这些值,即Int64/long
顺便说一句:这是我脑子里想不出来的。我必须再次检查c#中的整数运算才能完全验证这一点。tl;博士答复
将鼠标悬停在“var”上,您会看到类型(提示它是Int64/long)
长答覆:
只需将代码替换为var表示的类型,即可得到以下代码:
var longValue = 2147483650; // Three more than the max int size
var intValue = 10;
var variableOfUnknownType = longValue - intValue;
uint longValue = 2147483650; // Three more than the max int size
int intValue = 10;
long variableOfUnknownType = longValue - intValue;
正如你所见,这是三种不同的类型,但为什么呢?这是有道理的。不需要占用64位,如果您可以对32位执行相同的操作,并且由于这是一个正数,我们可以使用无符号整数。
int是不言自明的,但是long一开始有点混乱
作为程序员,我们知道int.MaxValue+3-10同样适用于int
,但编译器不知道这一点。毕竟,他怎么知道intVariable
是10?很简单:他没有。因此,他推断出他知道可以处理该值的类型。因为我们在这里进行减法,它可能会导致负值,所以他采用有符号类型,可以拟合这些值,即Int64/long
顺便说一句:这是我脑子里想不出来的。我必须再次检查c#中的整数运算才能完全验证这一点。只需将鼠标悬停在'var'关键字上,它就会告诉您推断出的类型是正确的。我的直觉是将鼠标悬停在没有产生预期结果的变量名上。@JacobHorbulyk它显示了什么,它与您提到的其他选项有什么冲突?鼠标悬停在var
关键字上会产生System.Int64
,这与调用Console.WriteLine时发生的情况相匹配(variableOfUnknownType.GetType())
将鼠标悬停在变量名上会突出显示该变量的用途,但不提供该变量类型的信息。这不是我在MS VS 2013和.Net 4.5上得到的。只需将鼠标悬停在“var”关键字上,它会告诉您推断出的类型是正确的。我的直觉是将鼠标悬停在没有生成该变量名的变量名上预期结果。@JacobHorbulyk它显示了什么,以及它如何与您提到的其他选项冲突?将鼠标悬停在var
关键字上会生成System.Int64
,它与调用Console.WriteLine(variableOfUnknownType.GetType())时发生的情况相匹配
将鼠标悬停在变量名上会突出显示该变量的用法,但不会提供有关该变量类型的信息。这不是我在MS VS 2013和.Net 4.5中得到的