Stai riscontrando la differenza tra dichiarazione e assegnazione. Dichiarazione, con linee come
string match;
semplicemente dichiara al compilatore che si prevede di utilizzare una variabile di tipo stringa match
. Assegnazione, con linee come
match = null;
assegna il valorenull
a match
.
È possibile che una lingua dichiari che la dichiarazione e il compito devono sempre essere separati (non sono sicuro al 100%, ma credo che le vecchie versioni di Visual Basic l'abbiano fatto), ma la maggior parte delle lingue consente di combinare la dichiarazione e l'assegnazione, la scrittura
string match = null; // combined declaration and assignment
a significare
string match; // declaration
match = null; // assignment
C# richiede che le variabili essere assegnate prima di essere utilizzate. A differenza dei campi e degli eventi, le variabili locali non vengono automaticamente assegnate ai valori predefiniti, quindi è necessario dimostrare al compilatore che, prima di utilizzare match
, match
avrà un certo valore. Il compilatore non si cura del valore match
, purché tale variabile sia di tipo stringa.
Nel tuo caso, il compilatore non può provare con l'analisi locale che strArr
sarà non vuota perché il compilatore non ispezionare il codice di Split
, quindi non c'è alcuna garanzia che il codice sarà anche entrare nel ciclo foreach
, lascia lungo soddisfano le condizioni da assegnare a match
. Poiché la chiamata Console.WriteLine
utilizza match
e dal match
non può essere assegnata in fase di esecuzione con la dichiarazione string match
, il compilatore richiede di assegnare match
all'esterno del ciclo. Un modo per soddisfare il requisito è utilizzare string match = null
anziché string match
.
fonte
2012-03-15 17:53:14
Il compilatore vuole solo sapere che intendevi :-) – Jodrell
Esistono ancora diverse risposte su StackOverflow: solo una -> http://stackoverflow.com/questions/256073/c-sharp-error-use-of-unassigned -local-variable – AngeloBad