为什么我不能在C#中声明使用var的常量?

时间:2011-05-26 00:11:33

标签: c# declaration implicit-declaration

这个:

const int a = 5;

编译得很好,而

const var a = 5;

没有... while:

var a = 5;

编译就像这样:

int a = 5;

为什么吗

4 个答案:

答案 0 :(得分:16)

var关键字旨在帮助您避免编写长复杂的类型名称,这些名称不能是常量。

能够编写像

这样的声明非常方便
var dict = new Dictionary<string, List<Definition>>();

使用匿名类型时,必要

对于常数,这不是问题 具有常量文字的最长内置类型名称为decimal;这不是一个很长的名字。

可以使用任意长的enum名称作为常量,但C#编译器团队显然并不关心这一点。
首先,如果你的enum值不断变化,你可以将它放在enum中。 此外,enum名称不应太长。 (与复杂的泛型类型不同,可以且经常应该这样)

答案 1 :(得分:5)

这是一个编译器限制,这个限制的原因由eric lippert here

给出

答案 2 :(得分:2)

没有var的常量:

const int Value1 = 1;
const int Value2 = 2;

var的常量(创建后无法更改匿名类型属性值):

var constants = new { 
  Value1 = 1, 
  Value2 = 2,
};
//use as constants.Value1

答案 3 :(得分:0)

由于常量必须是内置数值类型或string,因此实际上不会节省太多; const int的长度与const var相同,int可能是最常见的常量类型。然后是double,这真的不是那么久。如果要输入很多内容,请使用Alt选项功能; - )