除字符串之外的引用类型的const字段只能使用null Error初始化

时间:2012-03-31 04:20:29

标签: c# .net

我正在尝试创建一个2D数组来存储一些不会像这样改变的值。

const int[,] hiveIndices = new int[,] {
{200,362},{250,370},{213,410} , 
{400,330} , {380,282} , {437, 295} ,
{325, 405} , {379,413} ,{343,453} , 
{450,382},{510,395},{468,430} ,
{585,330} , {645,340} , {603,375}
};

但是在编译时我得到了这个错误

hiveIndices is of type 'int[*,*]'. 
A const field of a reference type other than string can only be initialized with null.

如果我更改const to static,则会进行编译。我不明白添加const量词应该如何引发这种行为。

1 个答案:

答案 0 :(得分:43)

实际上你正试图制作数组 - 这是一种引用类型 - const - 这根本不会影响其值的可变性(你仍然可以改变数组中的任何值) - 使数组readonly使其编译,但也没有预期的效果。必须在编译时对常量表达式进行全面计算,因此不允许使用new运算符。

您可能正在寻找ReadOnlyCollection<T>

有关详情,请参阅相应的Compiler Error CS0134

  

一个常量表达式是一个可以完全评估的表达式   编译时间。因为只能创建一个非null值的方法   reference-type是应用new运算符,因为new   运算符不允许在常量表达式中,唯一可能的   除了string之外的引用类型的常量的值为null。