Compiler Error CS0165

使用了未赋值的局部变量“name”

C# 编译器不允许使用未初始化的变量。如果编译器检测到使用了可能未初始化的变量,就会生成 编译错误CS0165。有关详细信息,请参阅字段(C# 编程指南)。请注意,当编译器遇到可能会导致使用未赋值变量的构造时,即使您的特定代码不会使用该变量,也会生成此错误。这样可以避免对明确赋值使用过度复杂的规则。

有关更多信息,请参见 http://blogs.msdn.com/ericlippert/archive/2006/08/18/706398.aspx

下面的示例生成 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();
    }
}

编译器错误 CS0165 在递归委托定义来生成。可以通过在以下两个语句中定义委托可避免此错误,以便在变量初始化之前,不使用变量。下面的示例演示错误和解决方案。

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