if (i==101)
{
var lastLoopCheck;
}
Visual Studio 2013显示错误: - “必须初始化隐式类型的局部变量”
为什么呢?这是什么原因?
我的第一语言是JavaScript,其中允许未初始化的变量(本地和全局);看看下面的(JavaScript)代码:
var foo;
alert(typeof foo); //undefined
那么为什么在JavaScript中而不是在C#中允许使用未初始化的变量?
答案 0 :(得分:6)
C#允许您使用var
指定将以除显式之外的其他方式评估类型。对于使用的代码来说,这非常方便:
Type<string,int,int,int,int> xyzzy = new Type<string,int,int,int,int>();
现在你可以改为:
var xyzzy = new Type<string,int,int,int,int>();
但是,变量本身仍然是静态类型,因此类型必须在创建变量时可用,以便编译器可以知道如何处理它。
线索在于您看到的错误消息:
必须初始化隐式类型的局部变量
请注意,它是隐式输入而非无类型。
所以,其中:
int x; // explicit int.
var x = 7; // implicit int because we're using int to set it.
var x; // no idea what type this should be.
前两个是可以的,因为类型信息可用。第三个是不没关系,因为关于你想要什么类型的信息不可用。
将var
与dynamic
的使用进行对比 - 后者与Javascript中的var
更密切相关,它是动态类型(a)并确定可以对其进行的操作推迟到运行时间。
(a)从技术上讲,我认为它是still considered a static type,但在编译时会绕过常规类型检查。