C#值已声明但从未使用过

时间:2009-12-11 11:45:11

标签: c#

我试着抓住我捕捉不同错误类型的地方:

catch (XmlException XmlExp)
{
    return false; 
}

catch (XmlSchemaException XmlSchExp)
{
    return false; 
}
catch (Exception GenExp)
{
    throw GenExp;
}

请注意,XMLException XMLExp已声明但从未使用过。是否可以在不声明局部变量的情况下捕获XMLException?

这是有效的代码:

catch (XmlException)
{
    return false; 
}

10 个答案:

答案 0 :(得分:17)

是的,就像这样

catch (XmlException)
{
    return false; 
}

catch (XmlSchemaException)
{
    return false; 
}

catch (Exception GenExp)
{
     // inspect or use GenExp
     throw;
}

答案 1 :(得分:6)

这样做

catch (XmlException)
{
   return false; 
}

catch (XmlSchemaException)
{
   return false; 
}

catch (Exception)
{
   throw;
}

答案 2 :(得分:5)

只需使用

catch (XmlException)
{
    throw;
}

当你抛出像throw ex这样的特定异常对象时,堆栈跟踪会被覆盖。

答案 3 :(得分:2)

是。只是错过变量名称:

catch (XmlException)
{
    return false; 
}

答案 4 :(得分:1)

是的,你可以:

catch (XmlException)
{
  return false; 
}

当然,关于例外的所有其他规则都适用 - 即不使用它们进行流量控制,避免任何可能被抛出的情况等等。

答案 5 :(得分:0)

catch (XmlException)
{
    return false; 
}
catch (XmlSchemaException)
{
    return false; 
}
catch (Exception GenExp)
{
    throw GenExp;
}

只需省略变量名称即可。 对于最后一次捕获,我建议使用throw;而不是throw GenExp - 因为后者丢失了调用堆栈。虽然如果你真的只做一次重新抛出,那么就省略整个catch块。

答案 6 :(得分:0)

catch (Exception unknownException)
{
   throw new Exception("Unknown error.", unknownException);
}

答案 7 :(得分:0)

catch 
{}

也是有效的代码并捕获所有异常。

答案 8 :(得分:0)

重要通知!

这是一种非常糟糕的编程风格 - 使用类似的结构:

try
{
  // smth
}
catch(IOException e)
{
   throw e;
}

这意味着,异常堆栈将从此点(堆栈)开始,并且您可以丢失任何低于此点的堆栈帧。

正确:

 try
    {
      //smth
    }
    catch(IOException e)
    {
      throw;
    }

答案 9 :(得分:0)

1-我认为你应该自己做这件事。

2- catch(XmlException)//有效     {        返回false;     }     catch(XmlSchemaException)//有效     {        返回false;     }     catch(Exception GenExp)
    {        抛出GenExp;     }
    //有效但没有意义,因为Exception会发生并且没有尝试catch块来handel它