Freigeben über


Compilerfehler CS0165

Aktualisiert: Juli 2008

Fehlermeldung

Verwendung der nicht zugewiesenen lokalen Variablen "Name"
Use of unassigned local variable 'name'

Der C#-Compiler lässt die Verwendung nicht initialisierter Variablen nicht zu. Wenn der Compiler die Verwendung einer Variable entdeckt, die nicht initialisiert ist, wird CS0165 generiert. Weitere Informationen finden Sie unter Felder (C#-Programmierhandbuch). Beachten Sie, dass dieser Fehler generiert wrid, wenn der Compiler ein Konstrukt entdeckt, das zur Verwendung einer nicht zugewiesenen Variablen führen könnte, selbst wenn Ihr spezieller Code nicht dazu führt. Dadurch wird vermieden, dass zu komplexe Regeln für eine definitive Zuweisung benötigt werden.

Wenn dieser Fehler auftritt

Weitere Informationen finden Sie unter https://blogs.msdn.com/ericlippert/archive/2006/08/18/706398.aspx

Beispiel

Im folgenden Beispiel wird CS0165 generiert:

// CS0165.cs
using System;

class MyClass
{
   public int i;
}

class MyClass2
{
   public static void Main(string [] args)
   {
      int i, j;
      if (args[0] == "test")
      {
         i = 0;
      }

      /*
      // to resolve, either initialize the variables when declared
      // or provide for logic to initialize them, as follows:
      else
      {
         i = 1;
      }
      */

      j = i;   // CS0165, i might be uninitialized

      MyClass myClass;
      myClass.i = 0;   // CS0165
      // use new as follows
      // MyClass myClass = new MyClass();
      // myClass.i = 0;
   }
}

Durch folgenden Code wird der Fehler CS0165 in Visual Studio 2008 ausgelöst, jedoch nicht in Visual Studio 2005:

//cs0165_2.cs
class Program
{
    public static int Main()
    {
        int i1, i2, i3, i4, i5;

        // this is an error, because 'as' is an operator
       // that is not permitted in a constant expression.
        if (null as object == null)
            i1 = 1;

        // this is an error, because 'is' is an operator that
        //  is not permitted in a constant expression.
        // warning CS0184: The given expression is never of the provided ('object') type
        if (!(null is object))
            i2 = 1;

        // this is an error, because a variable j3 is not
        // permitted in a constant expression.
        int j3 = 0;
        if ((0 == j3 * 0) && (0 == 0 * j3))
            i3 = 1;

        // this is an error, because a variable j4 is not
        // permitted in a constant expression.
        int j4 = 0;
        if ((0 == (j4 & 0)) && (0 == (0 & j4)))
            i4 = 1;

        // this might be an error, because a variable j5 is not
        // permitted in a constant expression.
        // warning CS1718: Comparison made to same variable; did you mean to compare something else?
        int? j5 = 1;
        if (j5 == j5)
            i5 = 1;


        System.Console.WriteLine("{0}{1}{2}{3}{4}{5}", i1, i2, i3, i4, i5); //CS0165

        return 1;
    }

}

Dieser Fehler tritt in rekursiven Delegatdefinitionen auf und kann vermieden werden, indem der Delegat in zwei Anweisungen definiert wird:

class Program
    {
        delegate void Del();
        static void Main(string[] args)
        {
            Del d = delegate() { System.Console.WriteLine(d); }; //CS0165
// Try this instead:
// Del d = null;
//d = delegate() { System.Console.WriteLine(d); };
            d();
        }
    }

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2008

Text und Codebeispiel für rekursive Delegaten hinzugefügt.

Korrektur inhaltlicher Fehler.