下面的示例代码在编译时给出了“使用未分配的局部变量'resultCode'”:
string answer;
string resultCode;
try
{
resultCode = "a";
}
catch
{
resultCode = "b";
}
finally
{
answer = resultCode;
}
我原以为上面的catch块应该捕获所有异常,因此在输入finally块的时候不能取消分配resultCode。任何人都能解释一下吗? 感谢。
编辑:谢谢大家。这个引用文档的答案似乎很好地回答了这个问题:https://stackoverflow.com/a/8597901/70140答案 0 :(得分:3)
举例说明:
string answer;
string resultCode;
try
{
// anything here could go wrong
}
catch
{
// anything here could go wrong
}
finally
{
answer = resultCode;
}
此时编译器不能假设或保证resultCode
曾被赋予一个值。因此,它警告您可能会使用未分配的变量。
答案 1 :(得分:1)
添加一些解释,例如,在以下代码中,变量n在try块内初始化。尝试在Write(n)语句中的try块之外使用此变量将生成编译器错误。
int n;
try
{
int a = 0; // maybe a throw will happen here and the variable n will not initialized
// Do not initialize this variable here.
n = 123;
}
catch
{
}
// Error: Use of unassigned local variable 'n'.
Console.Write(n);
正如评论中所建议的那样,如果您同时在Try
和Catch
中分配,请尝试在块之后进行分配
string answer;
string resultCode;
try
{
resultCode = "a";
}
catch
{
resultCode = "b";
}
finally
{
// answer = resultCode;
}
answer = resultCode;
它会编译。
答案 2 :(得分:0)
编译器无法保证try
或catch
块中的任何代码实际运行时都不会发生异常。理论上,当您尝试使用它时,resultCode
的值为未分配。
答案 3 :(得分:0)
Visual Studio不知道您正在分配' resultCode'一个值。你需要事先给它一个值。底部的示例代码。
这是一个层次结构。 Visual Studio没有看到' resultCode'的定义。在try / catch中。
string answer = "";
string resultCode = "";
try
{
resultCode = "a";
}
catch
{
resultCode = "b";
}
finally
{
answer = resultCode;
}