使用未分配的局部变量错误#2

时间:2012-09-24 19:39:22

标签: c# .net variables scope

我查看了谷歌和其他stackoverflow Use of unassigned local variable错误,我仍然找不到答案。我想也许我的错误是因为误用了ExtractionCtrl的范围。我尝试使用此代码来测试范围,它的工作原理。所以我现在不知道我的错误在哪里。

测试范围

namespace RandomTesting
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            int x = 5;

            switch (x)
            {
                case 2:
                    System.Console.WriteLine("Your # is 2");
                    break;

                case 5:
                    System.Console.WriteLine("Your # is :{0}", x);
                    x = x + 2;
                    System.Console.WriteLine("Your # is :{0}", x);
                    break;
            }

            System.Console.WriteLine("Your # is :{0}", x);
            Console.ReadLine();
        }
    }
}

主要代码的一部分

switch (arg)
{
    case "AR":
        ExtractionCtrl = new ARExtractionController();

        // add new mapping here
        break;

    case "ICN":
        ExtractionCtrl = new IcnExtractionController();

        // add new mapping here
        break;
}

int ticketID;
if (int.TryParse(arg, out ticketID))
{
    string returnedFilePath = ExtractionController.GetStartupPath();
    ExtractionCtrl.Extract(ticketID, returnedFilePath, AR_TEMPLATE_PATH, MAPPING_PATH);
}

3 个答案:

答案 0 :(得分:4)

您设置ExtractionCtrl的开关没有默认情况,因此切换后的ExtractionCtrl可能不会被初始化。由于你没有显示ExtractionCtrl的声明,我假设声明没有初始化:

SomeExtractionCtrlType ExtractionCtrl;

因此错误。

答案 1 :(得分:1)

您最有可能需要default中的switch阻止。

switch (arg)
{
    case "AR":
        ExtractionCtrl = new ARExtractionController();

        // add new mapping here
        break;

    case "ICN":
        ExtractionCtrl = new IcnExtractionController();

        // add new mapping here
        break;
    default:
        ExtractionCtrl = new DefaultExtractionController();
        break;
}

或者您可以在定义时初始化ExtractionCtrl。不过,我更喜欢default选项。

答案 2 :(得分:1)

在Visual Studio中,这是一个非常常见的编译时错误,这意味着编译器认为变量在被调用之前不会被初始化。你应该做的是添加一个default案例,正如其他答案所说的那样,但是当你声明变量时,也可以将变量初始化为null,或者在{{1}中设置它的值。 }}。不幸的是,Visual Studio非常挑剔,并且它没有看到所有潜在的路径最终都会给出一个值。