关于c#:除了字符串之外的引用类型的const字段只能用null Error初始化

A const field of a reference type other than string can only be initialized with null Error

本问题已经有最佳答案,请猛点这里访问。

我试图创建一个二维数组来存储一些不会像这样改变的值。

1
2
3
4
5
6
7
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}
};

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

1
2
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–这根本不会影响其值的可变性(您仍然可以改变数组中的任何值)–使数组readonly–将使其编译,但也没有所需的效果。常量表达式必须在编译时完全计算,因此不允许使用新的运算符。

你可能在找ReadOnlyCollection

有关更多信息,请参阅相应的编译器错误CS0134:

A constant-expression is an expression that can be fully evaluated at
compile-time. Because the only way to create a non-null value of a
reference-type is to apply the new operator, and because the new
operator is not permitted in a constant-expression, the only possible
value for constants of reference-types other than string is null.