Assegnazione valore in C #
-
05-07-2019 - |
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.
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.