c#.net中的内部异常,带有简单的例子

时间:2016-04-03 14:49:57

标签: c# .net

我一直在寻找,但用简单的话语找不到任何解释。我需要知道c#中的inner exception是什么。

在msdn上,它解释但是这个例子并不十分清楚。我需要用简单的例子来解释。感谢

4 个答案:

答案 0 :(得分:2)

InnerException是异常的属性。当存在一系列异常时,最新的异常可以在InnerException属性中获取先前的异常。

见:http://www.c-sharpcorner.com/uploadfile/puranindia/innerexception-in-C-Sharp/

答案 1 :(得分:2)

内部异常用于在新异常中包装异常。大多数时候你不需要这样做。但是假设你有一个提交订单的类。该代码调用其他类,并在其内部的某处抛出NullReferenceException

如果你只是尝试下订单,那么你会得到一个相当含糊的NullReferenceException。你可以这样做:

try
{
    SubmitOrder(order);
}
catch(Exception ex)
{
    throw new OrderSubmitException("An error occurred while placing the order", ex);
}

现在,当订单提交失败时,您获得的不仅仅是NullReferenceException,而是OrderSubmitException。当您在日志中看到它或在应用程序中进一步查看它时,更容易判断它是在下订单时抛出的异常。

但是真正重要的细节在新异常的InnerException属性中(因为你将原始异常传递给了构造函数。)所以你有一个OrderSubmitException但你也有更具体的细节,如堆栈跟踪,InnerException

在现实生活中,你需要这样做并不常见。大多数情况下,当我们将异常包装起来时,这是不必要的。最初的异常有它的堆栈跟踪,这已经足够了。

在检查由其他内容引发的异常时,您会更关心InnerException。通常,如果异常不包含足够的详细信息,InnerException中的内容会更多,并且可能还有自己的InnerException

答案 2 :(得分:0)

内部异常允许您进行NEST异常。

func flip3<A, B, C>(f: (A, B) -> C) -> B -> A -> C { return { b in { a in f(a, b) } } } flip3(/)(2.0)(3.0) // 1.5

答案 3 :(得分:0)

当抛出异常X作为前一个异常Y的直接结果时。 例如:

   public void ThrowInner () 
   {
       throw new MyAppException("ExceptExample inner exception");
   }

   public void CatchInner() 
   {
      try 
      {
          this.ThrowInner();
      }
      catch (Exception e) 
      {
         throw new MyAppException("Error caused by trying ThrowInner.",e);
      }
   }