【问题标题】:Why implicitly-typed local variables must be initialized in C# and not in JavaScript?为什么隐式类型的局部变量必须在 C# 而不是 JavaScript 中初始化?
【发布时间】:2015-05-22 04:05:04
【问题描述】:
if (i==101)
    {
        var lastLoopCheck;
    }

Visual Studio 2013 显示错误:-“必须初始化隐式类型的局部变量”

为什么?这是什么原因?

我的第一语言是 JavaScript,其中允许未初始化的变量(本地和全局);看看下面的(JavaScript)代码:

var foo;
alert(typeof foo); //undefined

那么为什么在 JavaScript 中允许未初始化的变量而不在 C# 中呢?

【问题讨论】:

  • 查看 stackoverflow.com/questions/961581/… - 你对 C# 中的 var 有一些严重的误解(这与 JavaScript 中的 var非常 不同)。
  • C# 中的事物变量具有 javascript 不是类型。所有变量都需要静态类型语言中的类型,C# 就是其中之一。
  • 为您找到更好的副本 - stackoverflow.com/questions/8457813/…。我确实相信你真正的问题是“为什么 C# 使用 dynamic 而不是 var”,但是“C#/JavaScript 中 var 的实现之间的差异”应该是很好的替代品。
  • 旁注:您所谈论的横幅仅对您自己可见,以帮助您澄清问题(您这样做了,还指责他人误解帖子完全是可选的所以)

标签: javascript c# variables initialization


【解决方案1】:

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.

前两个没问题,因为类型信息可用。第三个是好的,因为没有关于你想要什么类型的信息。

对比 vardynamic 的使用 - 后者与 Javascript 中的 var 更密切相关,它是动态类型的(a) 并弄清楚可以对它做什么延迟到运行时。


(a) 从技术上讲,我认为是still considered a static type,但在编译时会绕过常规类型检查。

【讨论】:

  • 还请清除$ 声明以完成文章,但很好的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多