2010-12-05 21 views
7
literal con

simple pregunta corta ¿Cuál es exactamente la diferencia entreInicialización C# matriz con nueva inicialización vs

int[] intarray = new int[2]{1,2}; 

y

int[] intarray2 = {4,5,6}; 

Al igual que lo hace el "nuevo" exactamente? y realmente lo necesitas?

Supongo que solo asigna memoria ..... o algo? Lo siento, soy completamente nuevo en C# y tengo preguntas sobre cómo aprenderlo.

Respuesta

11

El segundo es array initializer syntax. Es solo azúcar sintáctico. Ambos inicializan nuevas instancias de matriz con sus respectivos valores, el primero es más explícito (repite que es una matriz entera de dos elementos en el lado derecho, lo cual es bastante obvio a partir de lo que sigue, por lo que el compilador es capaz de inferir esta información).

Así que los siguientes son equivalentes:

int[] array = new int[2] { 1, 2 }; 

y:

int[] array = { 1, 2 }; 

y:

var array = new[] { 1, 2 }; 

En todos los casos se están inicializando una matriz de dos números enteros. Personalmente prefiero la última sintaxis.

+0

¿Qué es exactamente el azúcar synatactic. Nunca escuché ese término antes? –

+2

[Azúcar sintáctico] (http://en.wikipedia.org/wiki/Syntactic_sugar) es algo que está integrado en el lenguaje y simplifica la sintaxis, pero que en realidad no existe en el ensamblado compilado. Cuando miras la IL generada, aparece la primera sintaxis mucho más explícita. Pero al escribirlo es mejor si dejamos que el compilador haga el trabajo en lugar de nosotros. ¿Por qué usar la primera sintaxis? ¿Por qué repetir int en el lado derecho? ¿Por qué repetir el tamaño de la matriz? Todo esto es bastante obvio cuando simplemente escribimos '{1, 2}'. De esto sabemos que hay dos elementos y que el tipo es int. –

+0

Buena explicación. Creo que el punto más importante es que el azúcar sintáctico nos permite expresar una idea de una manera breve y aún así tener un programa válido. – ChaosPandion

0

Este es un azúcar sintáctico.

No hay diferencia entre ellos; compilarán a IL idénticos.
Sin embargo, el initializier de matriz solo se puede utilizar para inicializar campos o propiedades de matriz.

2

Las matrices son reference types y se asignan utilizando la palabra clave C# new, al igual que otros tipos de referencia.

Uno de sus sintaxis de matriz es simplemente una sintaxis más corta también reconocido por el compilador de C# - (hay otras variaciones en ella también) Ambos sus ejemplos asignan (nuevo) e inicialice {elementos} para una instancia de Array:

La primera versión establece explícitamente el tamaño de la matriz.

int[] intarray = new int[2]{1,2}; 

La segunda versión permite que el compilador de C# inferir el tamaño de la matriz por # de elementos en la lista de inicialización.

int[] intarray2 = {4,5,6}; 

En general, el compilador de C# reconoce la sintaxis especializada para declarar e inicializar arrays nativos de C# que enmascaran el hecho se está utilizando el underlying System.Array class.

1
int[] intarray2 = {4,5,6}; 

es exactamente el mismo que:

int[] intarray2 = new int[] {4, 5, 6}; 

es sólo una forma más corta (abreviado) de codificación, de hecho, el compilador asignará la memoria de la misma Cantidad de memoria para la matriz, la primera uno no escribe explícitamente el "nuevo", al igual que cuando asigna un número entero a una variable doble, puede escribir el molde o no (porque es un yeso seguro) y producirá el mismo efecto. ejemplo:

int i = 12; 
double d = i; 

lo mismo que:

int i = 12; 
double d = (double)i; 
Cuestiones relacionadas