Has encontrado la diferencia entre la declaración y la asignación. Declaración, con líneas como
string match;
simplemente declara al compilador que va a utilizar una variable de tipo cadena match
. Asignación, con líneas como
match = null;
asigna el valor null
a match
.
Es posible que un idioma declare que la declaración y la asignación siempre deben separarse (no estoy 100% seguro, pero creo que las versiones anteriores de Visual Basic lo hicieron), pero la mayoría de los idiomas le permiten combinar declaración y asignación, escribiendo
string match = null; // combined declaration and assignment
que significa
string match; // declaration
match = null; // assignment
C# requiere que se asignan las variables antes de ser utilizados. A diferencia de los campos y eventos, a las variables locales no se les asignan automáticamente los valores predeterminados, por lo que debe probar al compilador que, antes de usar match
, match
tendrá algún valor. Al compilador no le importa qué valor tiene match
, siempre que esa variable sea de tipo cadena.
En su caso, el compilador no puede probar con el análisis local que habrá strArr
no vacío porque el compilador no inspecciona el código de Split
, así que no hay garantía de que el código será incluso entrar en el bucle foreach
, deja a lo largo de cumplir la condición para asignar a match
. Como la llamada Console.WriteLine
usa match
, y como match
no se puede asignar en tiempo de ejecución con la declaración string match
, el compilador requiere que asigne match
fuera del ciclo. Una forma de cumplir el requisito es usar string match = null
en lugar de string match
.
El compilador solo quiere saber que lo decía en serio :-) – Jodrell
Todavía existen varias respuestas en StackOverflow: solo una -> http://stackoverflow.com/questions/256073/c-sharp-error-use-of-unassigned -local-variable – AngeloBad