2012-03-31 10 views
19

Estoy intentando crear una matriz 2D para almacenar algunos valores que no cambian de esta manera.Un campo const de un tipo de referencia que no sea una cadena solo se puede inicializar con nulo Error

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} 
}; 

Pero al compilar me sale este error

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

Si cambio const to static, compila. No entiendo cómo agregar el cuantificador de const debe inducir este comportamiento.

Respuesta

43

realidad que están tratando de hacer que el gama - que es un tipo de referencia - const - esto no afectaría a la mutabilidad de sus valores en absoluto (todavía se puede mutar cualquier valor dentro de la matriz) - toma de la matriz readonly lo haría compilar, pero tampoco tendría el efecto deseado. Las expresiones constantes deben evaluarse por completo en el momento de la compilación, por lo tanto, el nuevo operador no está permitido.

Usted podría estar buscando ReadOnlyCollection<T>

Para más información, véase el correspondiente Compiler Error CS0134:

Una constante-expresión es una expresión que se puede evaluar plenamente en tiempo de compilación. Debido a que la única forma de crear un valor no nulo de un tipo de referencia es aplicar el nuevo operador y dado que el nuevo operador no está permitido en una expresión constante, el único valor posible para las constantes de los tipos de referencia que no sea una cadena es nulo.

+1

Gran explicación, gracias. – ABH

+0

En realidad, la creación de una matriz 2d de solo lectura requerirá escribir una envoltura para ella porque 'AsReadOnly ' solo admite matrices unidimensionales basadas en cero: para obtener más lecturas, consulte http://stackoverflow.com/questions/5079970/storing-2- dimensional-ints-as-readonly-const-in-separate-class-while-keeping-no – BrokenGlass

+0

¿Quieres decir que he votado negativamente porque mi respuesta no es la mejor? – ABH

Cuestiones relacionadas