有些帖子询问这两者之间的区别是什么.
(为什么我还要提这个...)
但我的问题是不同的,我称之为"抛出前"在另一个错误的神像处理方法.
public class Program {
public static void Main(string[] args) {
try {
// something
} catch (Exception ex) {
HandleException(ex);
}
}
private static void HandleException(Exception ex) {
if (ex is ThreadAbortException) {
// ignore then,
return;
}
if (ex is ArgumentOutOfRangeException) {
// Log then,
throw ex;
}
if (ex is InvalidOperationException) {
// Show message then,
throw ex;
}
// and so on.
}
}
Run Code Online (Sandbox Code Playgroud)
如果try & catch
用于Main
,那么我会throw; …
捕获异常并重新抛出异常时需要考虑哪些最佳实践?我想确保保留Exception
对象InnerException
和堆栈跟踪.以下代码块在处理此方式时是否存在差异?
try
{
//some code
}
catch (Exception ex)
{
throw ex;
}
Run Code Online (Sandbox Code Playgroud)
VS:
try
{
//some code
}
catch
{
throw;
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
throw和throw之间的差异新异常()
有什么意义
catch (Exception)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
这是做什么的?
考虑:
try {
// Some code here
} catch (IOException e) {
throw e;
} catch (Exception e) {
throw e;
}
Run Code Online (Sandbox Code Playgroud)
throw e
和之间有什么区别throw new Exception(e)
?
try {
// Some code here
} catch (IOException e) {
throw new IOException(e);
} catch (Exception e) {
throw new Exception(e);
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码
try
{
//AN EXCEPTION IS GENERATED HERE!!!
}
catch
{
SqlService.RollbackTransaction();
throw;
}
上面的代码在此代码中调用
try
{
//HERE IS CALLED THE METHOD THAT CONTAINS THE CODE ABOVE
}
catch (Exception ex)
{
HandleException(ex);
}
作为参数传递给方法"HandleException"的异常包含堆栈跟踪中"throw"行的行号,而不是生成异常的实际行.任何人都知道为什么会发生这种情况?
编辑1 好的,谢谢大家的答案.我更改了内部捕获
catch(Exception ex)
{
SqlService.RollbackTransaction();
throw new Exception("Enrollment error", ex);
}
现在我在堆栈跟踪上有正确的行,但我不得不创建一个新的异常.我希望找到更好的解决方案:-(
EDIT2 也许(如果你有5分钟)你可以尝试这种情况,以检查你是否得到相同的结果,而不是很复杂的重新创建.
可能重复:
throw和throw之间的差异新异常()
我是一名致力于为遗留代码添加新功能的程序员.在调试时,我解析了这个Catch块,它从Visual Studio得到了一个愤怒的"对象未设置为对象的引用"通知:
catch(Exception ex)
{
SporeLog.Log("Failed to create new SavedDocumentList with Name: " + name, ex);
throw;
}
Run Code Online (Sandbox Code Playgroud)
"扔"是什么意思.我很熟悉,throw new [exceptiontype]...
但这对......来说意味着什么throw
?
这是一个好的做法,还是应该改变这些代码以简化开发人员对我的试验?
为什么Visual Studio会因此而对我大喊大叫呢?
我试图在我的代码中获得一个简单的 SQL 语句,并获得一个DataTable
,由于某种原因,我得到了这个奇怪的异常:
列名无效
这是我的代码:
public DataTable GetAllVideoID(string stringId)
{
dt = new DataTable();
dataObj = new DataObj();
sql = "SELECT * FROM TBL_VIDEOS WHERE TBL_VIDEOS.ID=" + stringId;
return dt = dataObj.SelectDataTable(sql);
}
public DataTable SelectDataTable(string sql)
{
try
{
conn = new SqlConnection(conString);
conn.Open();
adapter = new SqlDataAdapter(sql, conn);
dt = new DataTable();
adapter.Fill(dt);
return dt;
}
catch (Exception e)
{
throw e;
}
finally { conn.Close(); }
}
Run Code Online (Sandbox Code Playgroud)
当我在我的管理工具上运行它时,只是 statemnet - 它完美地工作。所以我不知道..
我的数据库结构:ID、TITLE、V_DESCIPTION、UPLOAD_DATE、V_VIEW、USERNAME、RATING、V_SOURCE、FLAG
谢谢 :)
我有下一个代码
public async Task<IEnumerable<MyTabel>> GetData()
{
try
{
var dbCtx = new myEntities();
return await dbCtx.MyTabel.ToListAsync();
//return await dbCtx.MyTabel.ToArrayAsync();
}
catch (Exception ex)
{
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道什么是ToListAsync或ToArrayAsync方法更适合性能?有人知道吗 ?
谢谢.
UPDATE
对我来说,性能是eqval tp更少的内存使用,更快的查询时间,更高的并发性
我有一个消耗Web API操作的异步方法.它似乎陷入了一个循环.我的理由是因为如果我在catch块的第1行放置一个断点,并且进入,它实际上从未击中第二行.
我最初返回一个包含100,000+(~30mb)行的数据集,并认为由于请求的大小,它可能会很慢,但在更改我的Web API操作以仅返回1行后问题仍然存在.当我浏览到Web API解决方案的URI时,肯定会返回数据,我在浏览器中返回了JSON.
public async Task<IEnumerable<Document>> GetAll()
{
try
{
var response = await _client.GetAsync(
string.Format("{0}/api/document", _baseURI));
// never hits line below
return await response.Content.ReadAsAsync<Document>()
as IEnumerable<Document>;
}
catch (Exception ex)
{
// handle exception
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定我在这里遗失了什么?一些帮助将不胜感激.
编辑1
在回答一些问题时,我有一个由MVC项目引用的Web API项目.我必须对JSON反序列化的原始问题进行一些更改.
库:
public async Task<IEnumerable<Document>> GetAll()
{
try
{
string json;
var response = await _client.GetAsync(string.Format(
"{0}/api/document", _baseURI)).ConfigureAwait(false);
var resource = await response.Content.ReadAsAsync<Document>();
using(var reader = new StreamReader(resource.ToString()))
{
json = reader.ReadToEndAsync().ToString();
}
return JsonConvert.DeserializeObjectAsync<Document>(json)
as IEnumerable<Document>;
} …
Run Code Online (Sandbox Code Playgroud) c# ×7
.net ×3
exception ×3
try-catch ×3
throw ×2
ado.net ×1
asp.net ×1
asp.net-mvc ×1
async-await ×1
asynchronous ×1
java ×1
rethrow ×1
sql-server ×1