Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未分配局部变量误差#2的使用_C#_.net_Variables_Scope - Fatal编程技术网

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

C# 未分配局部变量误差#2的使用,c#,.net,variables,scope,C#,.net,Variables,Scope,我看过google和其他stackoverflow使用未分配局部变量的错误,但仍然找不到答案。我想我的错误可能是因为我误用了ExtractionCtrl的作用域。我尝试了这段代码来测试作用域,它可以工作。所以我不知道我的错误在哪里 测试范围 namespace RandomTesting { internal class Program { private static void Main(string[] args) {

我看过google和其他stackoverflow
使用未分配局部变量的错误,但仍然找不到答案。我想我的错误可能是因为我误用了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);
}

设置ExtractionCtrl的开关没有默认大小写,因此可能在开关后ExtractionCtrl未初始化。因为您没有显示ExtractionCtrl的声明,所以我假设它是在没有初始化的情况下声明的:

SomeExtractionCtrlType ExtractionCtrl;

因此出现错误。

设置ExtractionCtrl的开关没有默认大小写,因此可能在开关后ExtractionCtrl没有初始化。因为您没有显示ExtractionCtrl的声明,所以我假设它是在没有初始化的情况下声明的:

SomeExtractionCtrlType ExtractionCtrl;

因此出现错误。

您很可能需要
开关中的
默认

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
选项。

您很可能需要
开关中的
default

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
选项。

在Visual Studio中,这是一个非常常见的编译时错误,这意味着编译器认为在调用变量之前可能无法初始化该变量。您应该做的是添加一个
default
大小写,就像其他答案所说的那样,但在声明变量时也要初始化它,要么将其设置为
null
,要么将其设置为
default
中的值。不幸的是,Visual Studio非常挑剔,它没有看到所有可能的路径最终都会授予一个值。

在Visual Studio中,这是一个非常常见的编译时错误,这意味着编译器认为在调用变量之前有可能无法初始化该变量。您应该做的是添加一个
default
大小写,就像其他答案所说的那样,但在声明变量时也要初始化它,要么将其设置为
null
,要么将其设置为
default
中的值。不幸的是,Visual Studio非常挑剔,它没有看到所有可能的路径最终都会授予一个值。

arg
的值实际上是“AR”还是“ICN”?注意区分大小写。你从哪里得到错误?如果是因为未分配
ExtractionCtrl
,那么请在定义代码的位置和分配值的位置张贴代码如果arg的值是AR或ICN,为什么要尝试执行int.TryParse?它不是一直都是假的吗?-arg是“AR”-int。特里帕斯:我知道,对不起,我正在试图修改其他人的代码。arg的值实际上是“AR”还是“ICN”?注意区分大小写。你从哪里得到错误?如果是因为未分配
ExtractionCtrl
,那么请在定义代码的位置和分配值的位置张贴代码如果arg的值是AR或ICN,为什么要尝试执行int.TryParse?它不会一直是假的吗?-arg是“AR”-int。特里帕斯:我知道,对不起,我正在试图修改其他人的代码如果这种情况永远不会发生,你可以在那里抛出一个异常。编译器会明白,如果发生这种情况,你永远无法找到使用该变量的代码。是的,但我根本不知道他的业务规则。我不是说他必须抛出异常,只是,如果没有任何可接受的默认值,它是使用默认值的可行替代方法。但我现在不需要它,我只关注错误消息。arg不重要,编译器发现有些情况下您无法初始化
ExtractionCtrl
,这就是它抱怨的原因。如果这是一个运行时错误,并且
arg
被设置为“AR”,您就可以了。但是这是一个编译时错误,所以你必须初始化它。如果这种情况永远不会发生,你可以在那里抛出一个异常。编译器会明白,如果发生这种情况,你永远无法找到使用该变量的代码。是的,但我根本不知道他的业务规则。我不是说他必须抛出异常,只是,如果没有任何可接受的默认值,它是使用默认值的可行替代方法。但我现在不需要它,我只关注错误消息。arg不重要,编译器发现有些情况下您无法初始化
ExtractionCtrl
,这就是它抱怨的原因。如果这是一个运行时错误,并且
arg
被设置为“AR”,您就可以了。但这是一个编译时错误,因此您必须对其进行初始化。谢谢!,哇,在stackoverflow上发布愚蠢的问题让我感到愚蠢和内疚。谢谢!,哇,在stackoverflow上发布愚蠢的问题让我感到愚蠢和内疚。