Pregunta

En MonoDevelop Tengo el siguiente código que compila:

int[] row = new int[indices.Count]{};

Sin embargo, en tiempo de ejecución, lo entiendo:

  

Matrix.cs (53,53): CS0150 Error: A   Se espera que el valor constante (CS0150)   (TestMatrix)

Yo sé lo que esto significa y fuerzas de error que me a continuación, cambiar el tamaño de la matriz:

int[] row = new int[indices.Count]{};
Array.Resize(ref row, rowWidth);

Es esto algo que sólo tengo que tratar, ya que estoy usando MonoDevelop en Linux? Estaba seguro de que bajo .Net 3.5 yo era capaz de inicializar una matriz con una variable que contiene la anchura de la matriz. Alguien puede confirmar que este es aislado? Si es así, puedo informar del fallo de Bugzilla.

¿Fue útil?

Solución

No se puede mezclar la sintaxis de creación de la matriz con la sintaxis objeto de inicialización. Retire la { }.

Cuando se escribe:

int[] row = new int[indices.Count];

Usted está creando una nueva gama de indices.Count tamaño inicializado a los valores por defecto.

Cuando se escribe:

int[] row = new int[] { 1, 2, 3, 4 };

Se están creando una matriz y luego inicializar su contenido a los valores [1,2,3,4]. El tamaño de la matriz se infiere a partir del número de elementos. Es la abreviatura de:

int[] row = new int[4];
row[0] = 1;
row[1] = 2;
row[2] = 3;
row[3] = 4;

La matriz se sigue primero inicializado a los valores predeterminados , esta sintaxis simplemente proporciona una taquigrafía para evitar havind escribir esas asignaciones adicionales a sí mismo.

Otros consejos

El siguiente código falla al compilar por la misma razón en Windows / .NET / LINQPad:

void Main()
{
    int[] row = new int[indices.Count]{};
    row[2] = 10;
    row.Dump();
}

// Define other methods and classes here
public class indices {
    public static int Count = 5;
}

Sin embargo, la eliminación de la inicialización objeto a partir de la declaración ({}) hace que funcione.

En C #, si desea declarar una matriz vacía la sintaxis debe ser:

  

int [] fila = new int [indices.Count];

Porque cuando usted utilice el uso sintaxis de matrices de inicialización y especificar el tamaño de la matriz

int[] arr = new int[5]{1,2,3,4,5};

El tamaño de la matriz es información superflua. El compilador puede inferir el tamaño de la lista de inicialización. Como otros han dicho, o bien crear una matriz vacía:

int[] arr = new int[5];

o utilice la lista de inicialización:

int[] arr = {1,2,3,4,5};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top