在 catch 块内声明的变量与在 catch 块外部声明的变量冲突(在 catch 块之后)

本文关键字:catch 变量 声明 之后 外部 冲突 | 更新日期: 2023-09-27 18:32:17

我的理解是,您不能访问其范围之外的变量(通常从声明点开始,并在声明它的同一块的大括号处结束)。

现在考虑以下代码:

void SomeMethod()
{
   try
   {
      // some code
   }
   catch (Exception ex)
   {
      string str = "blah blah"; // Error: Conflicting variable `str` is defined below
      return str;
   }
   string str = "another blah"; // Error: A local variable named `str` cannot be defined in this scope  because it would give a different meaning to `str`, which is already used in the parent or current scope to denote something else.
   return str;
}

我将代码更改为以下内容:

void SomeMethod()
{
   try
   {
      // some code
   }
   catch (Exception ex)
   {
      string str = "blah blah";
      return str;
   }
   str = "another blah"; // Error: Cannot resolve symbol 'str'
   return str;
}

有什么解释为什么会发生这种情况吗?

在 catch 块内声明的变量与在 catch 块外部声明的变量冲突(在 catch 块之后)

正如您已经说过的:作用域内的声明仅对所述作用域有效。如果您在trycatch块内声明任何内容,则它仅在那里有效。比较:

try
{
    string test = "Some string";
}
catch
{
    test = "Some other string";
}

将导致完全相同的错误。

要使代码片段正常工作,您需要在 try-catch -block 之外声明字符串:

void SomeMethod()
{
   string str = String.Empty;
   try
   {
      // some code
   }
   catch (Exception ex)
   {
      str = "blah blah";
      return str;
   }
   str = "another blah";
   return str;
}