Compilerfehler CS0165

Verwendung der nicht zugewiesenen lokalen Variablen „name“

Der C#-Compiler lässt die Verwendung von nicht initialisierten Variablen nicht zu. Wenn der Compiler die Verwendung einer Variable entdeckt, die möglicherweise nicht initialisiert wurde, generiert er den Compilerfehler CS0165. Weitere Informationen finden Sie unter Felder. Dieser Fehler wird generiert, wenn der Compiler ein Konstrukt erkennt, das zur Verwendung einer nicht zugewiesenen Variablen führen kann, selbst wenn Ihr bestimmter Code dies nicht tut. Dadurch wird vermieden, dass zu komplexe Regeln für eine definitive Zuweisung nötig sind.

Weitere Informationen finden Sie unter Why does a recursive lambda cause a definite assignment error? (Warum verursacht ein rekursiver Lambdaausdruck einen Fehler bei der definitiven Zuweisung?).

Beispiel 1

Im folgenden Beispiel wird CS0165 generiert:

// 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();  
    }  
}  

Beispiel 2

Der Compilerfehler CS0165 kann in rekursiven Delegatdefinitionen auftreten. Sie können den Fehler vermeiden, indem Sie den Delegaten in zwei Anweisungen definieren, sodass die Variable nicht verwendet wird, bevor es initialisiert wird. Das folgende Beispiel zeigt den Fehler und die Lösung.

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)