在方法之外使用var

时间:2009-12-18 16:58:45

标签: c# .net var

我想使用var关键字在我的班级中声明一个字段,但var似乎只在方法内部工作。

我的代码如下:

public static Dictionary<string, string> CommandList = new Dictionary<string, string>{};

我希望:

public static var CommandList = new Dictionary<string, string>

为什么这不可能?

3 个答案:

答案 0 :(得分:31)

我关于这个主题的文章:

Why no var on fields?

总结:

  1. 如果我们有“var”字段,那么在分析表达式之前无法确定字段的类型,并且在我们已经需要知道字段的类型之后发生这种情况。

  2. 如果这些参考文献中有长链或甚至是循环,该怎么办?所有这些算法都必须在一个世界中进行重写和测试,在这个世界中,确定顶级类型信息,而不是消耗>。

  3. 如果您有“var”字段,则初始化程序可以是匿名类型。假设该字段是公开的。 CLR或CLS中还没有关于公开匿名类型字段的正确方法的标准。

答案 1 :(得分:6)

来自C# reference

  • 从Visual C#3.0开始,变量 在方法范围内声明 可以有一个隐式类型var。

同样来自The C# Programming Reference

  • var只能在同一语句中声明和初始化局部变量时使用;该变量不能初始化为null,也不能初始化为方法组或匿名函数。
  • var不能用于类范围的字段。

它不适合您的用途。

它的主要目的是允许在代码中支持匿名类型,并具有允许一种指定局部变量的简洁方法的附加优势。

答案 2 :(得分:0)

简短的回答是因为规范说它不合法。 ; - )

一般来说,这不是你想要做的。该成员的类型应为IDictionary<string, string>而不是Dictionary<string, string>。这是一个小问题但通常最好在外部可见对象中使用接口,以便以后可以更改类型而不会影响代码的客户端。编译器只是给你一点点推动指导你的方向。