Erreur du compilateur CS0165

Utilisation d’une variable locale non assignée 'name'

Le compilateur C# n’autorise pas l’utilisation de variables non initialisées. Si le compilateur détecte l’utilisation d’une variable qui n’a peut-être pas été initialisée, il génère l’erreur du compilateur CS0165. Pour plus d’informations, consultez Champs. Cette erreur est générée quand le compilateur rencontre une construction qui peut provoquer l’utilisation d’une variable non assignée, même si ce n’est pas le cas de votre code en particulier. Il est ainsi inutile d’utiliser des règles trop complexes pour l’assignation définie.

Pour plus d’informations, voir Pourquoi une expression lambda récursive provoque-t-elle une erreur d’affectation définie ?.

Exemple 1

L’exemple suivant génère l’erreur 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();  
    }  
}  

Exemple 2

L’erreur du compilateur CS0165 peut se produire dans les définitions de délégué récursif. Vous pouvez éviter cette erreur en définissant le délégué dans deux instructions afin que la variable ne soit pas utilisée avant d’être initialisée. L’exemple suivant illustre l’erreur et la résolution.

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)