Domanda

Senza inizializzazione come è possibile assegnare valori agli array?

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

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
È stato utile?

Soluzione

È solo zucchero sintattico.

Questa:

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

è compilato con lo stesso codice di:

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

Notare che il riferimento dell'array non è assegnato a s fino a quando non sono stati assegnati tutti gli elementi. Questo non è importante in questo caso particolare in cui dichiariamo una nuova variabile, ma farebbe una differenza in questa situazione:

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

Lo stesso vale per gli inizializzatori di oggetti e raccolte: la variabile viene assegnata solo alla fine.

Altri suggerimenti

È possibile dichiarare una variabile di matrice senza inizializzazione.

Dai un'occhiata http://msdn.microsoft.com/en- us / library / 0a7fscd0% 28VS.71% 29.aspx

Non stai assegnando un valore all'array " ;. Stai inizializzando una variabile di tipo "riferimento all'array". Il valore con cui lo si inizializza è un riferimento a un array creato dall'uso della sintassi dell'inizializzatore di array brevi {...} . Sebbene sia ammissibile solo nell'inizializzatore di variabili di tipo array, è esattamente equivalente a new T [] {...} , dove T viene dedotto dal tipo di variabile .

Penso che tu voglia sapere perché

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

funziona quando ci si aspetterebbe che ti venga richiesto di inizializzare l'array in questo modo:

string[] s = new string[];

o

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

La risposta è solo magia del compilatore. In base all'inizializzazione, il compilatore sa quanto è grande creare l'array, quindi lo fa proprio dietro le quinte. Proprio come la parola chiave var , il punto è limitare la quantità di informazioni ridondanti che è necessario digitare.

La parte {" all ", " in ", " all "} è l'inizializzazione. la parte new string [] può essere omessa perché le parentesi graffe e le stringhe sono notazioni abbreviate. Dai un'occhiata a MSDN su array a dimensione singola.

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

e la sua versione abbreviata

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

sono la stessa cosa. Vedere MSDN (sezione Inizializzazione array) per ulteriori informazioni dettagli.

Non hai bisogno della nuova parte stringa [] in C # 3 o superiore - funziona benissimo

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

È solo un caso in cui il compilatore è un po 'più intelligente e capisce cosa intendi: il back-end IL sarà lo stesso.

Puoi farlo semplicemente perché è permesso, non è necessario farlo in due passaggi, quindi questa è la scorciatoia. Consideralo zucchero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top