我已经想到抛出异常会带来副作用(例如收集堆栈信息),但是我意识到可能没有。以下两个版本的GetException
之间有区别吗?
public Exception GetException() {
try {
throw new Exception("Bummer");
}
catch (Exception e) {
return e;
}
}
public Exception GetException() {
return new Exception("Bummer");
}
参考方案
引发异常时,堆栈跟踪将“插入”到异常中(这就是通过StackTrace
属性可以获取的内容)。因此,是的,抛出异常对象有一个副作用。
抛出异常的问题(即使有
throw;
是堆栈跟踪被破坏(或者,如果使用throw ex;
,则被覆盖)
请注意,throw;
优于throw ex;
,因为第一个仅会破坏少量的行号,而第二个将完全重置堆栈跟踪。
有些人不信任...查看https://dotnetfiddle.net/RXicN9并检查行号。它们不一样。
一个更完整的示例,显示只有带有两个try... catch...
的方法的行号被修饰:https://dotnetfiddle.net/jJyYWB
有关说明,请参见Incorrect stacktrace by rethrow。请注意,这是一种特殊情况,只有在同一方法中两次抛出异常时才会发生。
当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…
改造正在返回一个空的响应主体 - java我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…
.NET C#Webbrowser填充输入,不带ID或类名 - javascript我需要在网络浏览器中填写一个输入,但这不起作用。我认为必须使用name属性来完成,但是怎么做呢?foreach (HtmlElement login in webBrowser1.Document.GetElementsByTagName("input")) { if (login.GetAttribute("name"…
每个文件合并后添加换行 - python我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…
ASP.NET-如何更改JSON序列化的方式? - javascript我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …