繁体   English   中英

try catch异常中的变量

[英]Variable in try catch exception

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

编译器抱怨,因为初始化值之前可能会遇到异常。 考虑以下(非常人为的)示例:

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之外的某个默认值。 不过,不得不想知道你想要用它做什么。

这意味着变量curNamespacecatch范围内使用之前未初始化。

将您的代码更改为:

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

您必须在try块之外分配它。

        string curNamespace = string.Empty; // or whatever

        try
        {
            curNamespace = "name";
        }
        catch (Exception e)
        {
            throw new Exception("Error reading " + curNamespace, e);
        }

您必须首先初始化curNamespace。 或者它“可能”在catch分支中未初始化。

你必须为变量赋值,因为不能保证变量在使用时会保留一些东西。

你可以这样做:

string curNamespace = String.Empty;

如果你更改了curNamespace的声明并为其赋值,它将起作用:

string curNamespace = null; /* ASSIGN SOMETHING HERE */
try
{
  curNamespace = "name";
}
catch (Exception e)
{
throw new Exception("Error reading " + curNamespace, e);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM