我查看了谷歌和其他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);
}
答案 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非常挑剔,并且它没有看到所有潜在的路径最终都会给出一个值。