Ошибка компилятора CS0165Compiler Error CS0165

Использование локальной переменной "name", которой не присвоено значениеUse of unassigned local variable 'name'

Компилятор C# не допускает использование неинициализированных переменных.The C# compiler does not allow the use of uninitialized variables. Если компилятор обнаруживает переменную, которая могла быть не инициализирована, он создает ошибку компилятора CS0165.If the compiler detects the use of a variable that might not have been initialized, it generates compiler error CS0165. Дополнительные сведения см. в разделе Поля.For more information, see Fields. Обратите внимание, что эта ошибка генерируется, если компилятор встречает конструкцию, которая может привести к использованию неподписанной переменной, даже если в конкретном коде это не выполняется.Note that this error is generated when the compiler encounters a construct that might result in the use of an unassigned variable, even if your particular code does not. В результате этого отпадает необходимость в слишком сложных правилах для определенного присваивания.This avoids the necessity of overly-complex rules for definite assignment.

Дополнительные сведения см. на веб-сайте http://blogs.msdn.com/ericlippert/archive/2006/08/18/706398.aspx.For more information, see http://blogs.msdn.com/ericlippert/archive/2006/08/18/706398.aspx.

ПримерExample

В следующем примере возникает ошибка CS0165:The following sample generates 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();  
    }  
}  

ПримерExample

Ошибка компилятора CS0165 может произойти в рекурсивных определениях делегатов.Compiler error CS0165 can occur in recursive delegate definitions. Можно избежать этой ошибки, определив делегат в двух операторах, чтобы переменная не использовалась до инициализации.You can avoid the error by defining the delegate in two statements so that the variable is not used before it is initialized. В следующем примере демонстрируется ошибка и ее разрешение.The following example demonstrates the error and the resolution.

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