2012-03-31 11 views
19

Sto provando a creare un array 2D per memorizzare alcuni valori che non cambiano in questo modo.Un campo const di un tipo di riferimento diverso dalla stringa può essere inizializzato solo con Errore nullo

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

Ma durante la compilazione ottengo questo errore

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

Se cambio const to static, si compila. Non capisco come l'aggiunta del quantificatore const dovrebbe indurre questo comportamento.

risposta

43

In realtà si stanno cercando di fare il serie - che è un tipo di riferimento - const - questo non inciderebbe mutevolezza dei suoi valori a tutti (è ancora possibile mutare qualsiasi valore all'interno dell'array) - rendendo l'array readonly lo farebbe compilare, ma non ha nemmeno l'effetto desiderato. Le espressioni costanti devono essere completamente valutate in fase di compilazione, quindi il nuovo operatore non è consentito.

si potrebbe essere alla ricerca di ReadOnlyCollection<T>

Per ulteriori consultare il corrispondente Compiler Error CS0134:

Una costante-espressione è un'espressione che può essere pienamente valutato a tempo di compilazione. Poiché l'unico modo per creare un valore non null di un tipo di riferimento consiste nell'applicare il nuovo operatore e poiché il nuovo operatore non è consentito in un'espressione costante, l'unico valore possibile di per le costanti dei tipi di riferimento diverso da stringa è nullo.

+1

Grande spiegazione, grazie. – ABH

+0

La creazione di un array 2d in sola lettura richiede la scrittura di un wrapper perché 'AsReadOnly ' supporta solo matrici unidimensionali e basate su zero: per ulteriori letture, consultare http://stackoverflow.com/questions/5079970/storing-2- dimming-ints-as-readonly-const-in-separate-class-while-keeping-no – BrokenGlass

+0

vuoi dire che ho downvoted coz la mia risposta non è la migliore? – ABH

Problemi correlati