Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#发现用var关键字声明的隐式变量类型_C#_Visual Studio_Var - Fatal编程技术网

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中得到的