try catch异常中的变量

时间:2012-02-17 15:26:57

标签: c# try-catch

在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部分我得到“使用未分配的变量”

6 个答案:

答案 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);

}