在try部分和catch部分中使用变量的区别是什么?
string curNamespace;
try
{
curNamespace = "name"; // Works fine
}
catch (Exception e)
{
// Shows use of unassigned local variable
throw new Exception("Error reading " + curNamespace, e);
}
如果我在try部分中使用变量,它编译得很好,在catch部分我得到“使用未分配的变量”
答案 0 :(得分:8)
编译器抱怨,因为在初始化值之前可能会遇到异常。考虑以下(非常人为的)示例:
string curNamespace;
try {
throw new Exception("whoops");
curNamespace = "name"; // never reaches this line
}
catch (Exception e) {
// now curNamespace hasn't been assigned!
throw new Exception("Error reading " + curNamespace, e);
}
修复方法是将curNamespace
初始化为try..catch
之外的某个默认值。不过,不得不想知道你想用它做什么。
答案 1 :(得分:3)
这意味着在curNamespace
范围内使用变量catch
之前未对其进行初始化。
将您的代码更改为:
string curNamespace = null;
它会编译好。
在 C#中,变量必须在使用前初始化。所以这是错误的:
string curNamespace; // variable was not initialized
throw new Exception("Error reading " + curNamespace); // can't use curNamespace because it's not initialized
答案 2 :(得分:2)
您必须将其分配到try块之外。
string curNamespace = string.Empty; // or whatever
try
{
curNamespace = "name";
}
catch (Exception e)
{
throw new Exception("Error reading " + curNamespace, e);
}
答案 3 :(得分:0)
您必须先初始化curNamespace。或者它“可能”在捕获分支中未初始化。
答案 4 :(得分:0)
你必须为变量赋值,因为不能保证变量在使用时会保留一些东西。
你可以这样做:
string curNamespace = String.Empty;
答案 5 :(得分:0)
如果您更改了curNamespace
的声明并为其指定了内容,那么它将起作用:
string curNamespace = null; /* ASSIGN SOMETHING HERE */
try
{
curNamespace = "name";
}
catch (Exception e)
{
throw new Exception("Error reading " + curNamespace, e);
}