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