Error del compilador CS0165

Uso de la variable local no asignada "name"

El compilador de C# no permite el uso de variables no inicializadas. Si el compilador detecta el uso de una variable que pueda no haberse inicializado, genera el error CS0165. Para obtener más información, vea Campos (Guía de programación de C#). Este error se genera cuando el compilador encuentra una construcción que podría dar como resultado el uso de una variable no asignada, incluso en el caso de que su código determinado no la use. Esto evita tener que usar reglas demasiado complejas para la asignación definitiva.

Para más información, consulte Why does a recursive lambda cause a definite assignment error? (¿Por qué se producen un error de asignación definitivo en una expresión lambda recursiva?).

Ejemplo 1

En el ejemplo siguiente se genera el error CS0165:

// CS0165.cs  
using System;  
  
class MyClass  
{  
    public int i;  
}  
  
class MyClass2  
{  
    public static void Main(string[] args)  
    {  
        // i and j are not initialized.  
        int i, j;  
  
        // You can provide a value for args[0] in the 'Command line arguments'  
        // text box on the Debug tab of the project Properties window.  
        if (args[0] == "test")  
        {  
            i = 0;  
        }  
        // If the following else clause is absent, i might not be  
        // initialized.  
        //else  
        //{  
        //    i = 1;  
        //}  
  
        // Because i might not have been initialized, the following
        // line causes CS0165.  
        j = i;  
  
        // To resolve the error, uncomment the else clause of the previous  
        // if statement, or initialize i when you declare it.  
  
        // The following example causes CS0165 because myInstance is  
        // declared but not instantiated.  
        MyClass myInstance;  
        // The following line causes the error.  
        myInstance.i = 0;
  
        // To resolve the error, replace the previous declaration with  
        // the following line.  
        //MyClass myInstance = new MyClass();  
    }  
}  

Ejemplo 2

El error del compilador CS0165 puede producirse en definiciones de delegados recursivas. Puede evitarlo mediante la definición del delegado en dos instrucciones, de manera que la variable no se use antes de inicializarse. En el ejemplo siguiente se muestra el error y la resolución.

class Program  
{  
    delegate void Del();  
    static void Main(string[] args)  
    {  
        // The following line causes CS0165 because variable d is used
        // as an argument before it has been initialized.  
        Del d = delegate() { System.Console.WriteLine(d); };
  
        //// To resolve the error, initialize d in a separate statement.  
        //Del d = null;  
        //// After d is initialized, you can use it as an argument.  
        //d = delegate() { System.Console.WriteLine(d); };  
        //d();  
    }  
}  

Load(String)