Normalmente, el compilador prohíbe el uso de variables locales no asignadas, pero no en el siguiente caso. ¿Por qué?
private void Main() { // This local variable is unassigned. string myVar; try { // The Throw() method prevents the assignment from happening... myVar = Throw(); } finally { // ... so myVar is still unassigned. } // Here we use myVar, which is unassigned, and the compiler is not complaining. if (myVar.Equals("Something")) { // ... } } private string Throw() { throw new Exception(); }Main() no detecta la excepción en el ejemplo. Por lo tanto, si se lanza la excepción, no se puede acceder al código después del bloque finally , y si no se lanza la excepción, se produce la asignación. Es por eso que, en cualquier caso, no puede ocurrir un uso de una variable no asignada. Y como no puede suceder, el compilador no lo informa.