关于c#中的异常的问题

kar*_*hik -1 .net c# exception-handling exception invalidoperationexception

以下是代码段:

class xxx
{

  public xxx(){}

  try
  {
    throw new Exception(InvalidoperationException);
  }
  catch(Exception x)
  {
  }
  catch(InvalidoperationException x)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉这里会引发哪个例外,背后的原因是什么.

Cod*_*ray 8

哇,这里有很多问题.从哪儿开始?

  1. 该代码将无法编译.try-catch您定义的块不在任何方法之外,这是不允许的.您需要方法移动它.

  2. 永远不要抛出一个你打算在以后的方法中抓住自己的方法.这通常被称为使用"流量控制"的例外,这是完全不鼓励的.这样做会产生性能成本,并且当您拥有抛出并捕获它自己的异常的代码时,监视使用调试器时抛出的异常也会非常混乱.如有必要,使用布尔变量(称为标志)进行流量控制.

  3. 始终首先捕获派生最多的异常类.这意味着你应该InvalidOperationException先抓住,然后才能抓住Exception.您需要catch在您拥有的代码中颠倒块的顺序.

  4. 你几乎应该永远不会抓住System.Exception.您应该捕获的唯一例外是您明确理解并且能够处理的那些例外.当您获得的唯一信息是抛出一般异常时,您几乎无法知道出了什么问题或如何处理它.

    本着同样的,你也应该永远不会抛出从您自己的代码此异常.选择一个从基System.Exception类继承的更具描述性的异常类,或者通过继承它来创建自己的异常类.


我看到其他答案显示了代码应该是什么样子的示例代码,是否要重写.我不会这样做,因为如果我重写你的代码是正确的,我最终会这样:

class Xxx
{
    public Xxx()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

不是特别有帮助.