Pregunta

Sin la inicialización, ¿cómo es posible asignar valores a matrices?

string[] s={"all","in","all"};

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
¿Fue útil?

Solución

Es solo azúcar sintáctica.

Esto:

string[] s = {"all","in","all"};

se compila al mismo código que:

string[] tmp = new string[3];
tmp[0] = "all";
tmp[1] = "in";
tmp[2] = "all";
string[] s = tmp;

Tenga en cuenta que la referencia de matriz no se asigna a s hasta que se hayan asignado todos los elementos. Eso no es importante en este caso particular en el que estamos declarando una variable nueva , pero sería diferente en esta situación:

string[] s = { "first", "second" };
s = new string[] { s[1], s[0] };

Lo mismo es cierto para los inicializadores de objetos y colecciones: la variable solo se asigna al final.

Otros consejos

Es posible declarar una variable de matriz sin inicialización.

mira esto http://msdn.microsoft.com/en- us / library / 0a7fscd0% 28VS.71% 29.aspx

No estás " asignando un valor a la matriz " ;. Está inicializando una variable de tipo " referencia a la matriz " ;. El valor con el que lo inicializa es una referencia a una matriz que se creó mediante el uso de la sintaxis corta del inicializador de matriz {...} . Aunque solo está permitido en el inicializador de variables de tipo de matriz, es exactamente equivalente a new T [] {...} , donde T se deduce del tipo de variable .

Creo que quieres saber por qué

 string[] s={"all","in","all"};

funciona cuando se esperaría que primero se inicialice la matriz de esta manera:

string[] s = new string[];

o

string[] s = new string[] {"all","in","all"};

La respuesta es simplemente la magia del compilador. El compilador sabe, en función de la inicialización, qué tan grande es la matriz, por lo que solo lo hace entre bastidores. Al igual que la palabra clave var , el punto es limitar la cantidad de información redundante que debe escribir.

La parte {" all ", " in ", " all "} es la inicialización. La parte de new string [] se puede omitir porque las llaves y la cadena son notación de mano corta. Eche un vistazo a MSDN en matrices de una sola dimensión.

string[] s = new string[] { "all","in","all"};

y su versión abreviada

string[] s = {"all","in","all"};

son lo mismo. Consulte MSDN (sección Inicialización de matrices) para obtener más información detalle.

No necesitas la parte de la nueva cadena [] en C # 3 o superior, esto funciona bien

string[] s = { "all","in","all"};

Es solo el caso de que el compilador sea un poco más inteligente y descubra lo que quiere decir: el back-end IL será el mismo.

Puede hacerlo simplemente porque está permitido, hacerlo en dos pasos no es necesario, por lo que esta es la taquigrafía. Considérelo azúcar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top