为什么隐式类型的局部变量必须在 C# 中初始化,而不是在 JavaScript 中?
Why implicitly-typed local variables must be initialized in C# and not in JavaScript?
if (i==101)
{
var lastLoopCheck;
}
Visual Studio 2013 显示错误:- "Implicitly-typed local variables must be initialized"
为什么?这是什么原因?
我的第一语言是JavaScript,其中允许未初始化的变量(本地和全局);看看下面的 (JavaScript) 代码:
var foo;
alert(typeof foo); //undefined
那么为什么 JavaScript 允许未初始化的变量而不是 C#?
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>();
但是,变量本身仍然是静态类型,所以类型必须在创建变量的时候可用,这样编译器才能知道如何处理它。
线索就在您看到的错误信息中:
Implicitly-typed local variables must be initialized
请注意,它是隐式类型化而不是非类型化。
因此,其中:
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 但在编译时会绕过常规类型检查。
if (i==101)
{
var lastLoopCheck;
}
Visual Studio 2013 显示错误:- "Implicitly-typed local variables must be initialized"
为什么?这是什么原因?
我的第一语言是JavaScript,其中允许未初始化的变量(本地和全局);看看下面的 (JavaScript) 代码:
var foo;
alert(typeof foo); //undefined
那么为什么 JavaScript 允许未初始化的变量而不是 C#?
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>();
但是,变量本身仍然是静态类型,所以类型必须在创建变量的时候可用,这样编译器才能知道如何处理它。
线索就在您看到的错误信息中:
Implicitly-typed local variables must be initialized
请注意,它是隐式类型化而不是非类型化。
因此,其中:
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 但在编译时会绕过常规类型检查。