我一直在寻找,但用简单的话语找不到任何解释。我需要知道c#中的inner exception
是什么。
在msdn上,它解释但是这个例子并不十分清楚。我需要用简单的例子来解释。感谢
答案 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);
}
}