2011-05-01 13 views
8
public byte[][,] Shapes = 
    { 
     { 
      {1,1}, 
      {1,1} 
     }, 
     { 
      {1}, 
      {1}, 
      {1}, 
      {1} 
     }, 
     { 
      {0,0,1}, 
      {1,1,1} 
     } 
    }; 

Recibo este error: "Los inicializadores de matriz solo se pueden utilizar en una variable o inicializador de campo. En su lugar, intente utilizar una nueva expresión".¿Es incorrecta esta inicialización de matriz?

que podía hacer esto ...

public class Shape 
{ 
    public byte[][,] Shapes; 

    public Shape() 
    { 
     Shapes = new byte[3][,]; 

     Shapes[0] = new byte[2, 2]; 
     Shapes[0][0, 0] = 1; 
     Shapes[0][0, 1] = 1; 
     Shapes[0][1, 0] = 1; 
     Shapes[0][1, 1] = 1; 

     Shapes[1] = new byte[1, 4]; 
     Shapes[1][0, 0] = 1; 
     Shapes[1][0, 1] = 1; 
     Shapes[1][0, 2] = 1; 
     Shapes[1][0, 3] = 1; 
    } 
} 

Pero eso hace que sea muy difícil añadir más formas a mi programa.

¿Mi inicializador está equivocado? Y si no puedo hacerlo de esta manera, ¿cuál es la forma más fácil de hacerlo?

Respuesta

9

Esto funciona para mí:

public byte[][,] Shapes = new byte[3][,] 
    { 
     new byte[,] { {1,1}, {1,1} }, 
     new byte[,] { {1}, {2}, {3}, {4} }, 
     new byte[,] { {0,0,1}, {1,1,1} } 
    }; 
+0

Tenga en cuenta, por supuesto, para cualquier persona que pueda encontrarse con esto y que aún no lo sepa, que para cualquier elemento adicional más allá de estas 3 filas, el 3 se incrementa. Cuando lo vi por primera vez, pensé que tal vez el 3 era para la cantidad de elementos (ranuras disponibles) en cada matriz, comenzando en 0. No lo es. Es por el número de filas, empezando por 1. – vapcguy

5

La sintaxis del inicializador de matrices ({ ... }) solo se puede utilizar para inicializar un campo o variable.
Para hacer arreglos dentro de la matriz externa, debe usar la sintaxis de creación de matriz normal.

Agregue new [] antes del { ... } interno para crear una matriz implícitamente tipada.

Dado que se trata de byte sy arreglos multidimensionales, es posible que deba especificar explícitamente algunos de los tipos, escribiendo new byte[,] { ... }.

+0

Traducción: Básicamente lo mismo que la respuesta de Cheeso, menos el ejemplo, a excepción de que a veces puede deshacerse de ese tipo. – vapcguy

Cuestiones relacionadas