首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在C#中捕获后却重新抛出了异常?

为什么在C#中捕获后却重新抛出了异常?

提问于 2017-12-13 10:40:38
回答 2关注 0查看 732

我正在看可序列化DTO 上的文章C# - 数据传输对象。

文章包含这段代码:

代码语言:txt
复制
public static string SerializeDTO(DTO dto) {
代码语言:txt
复制
    try {
代码语言:txt
复制
        XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
代码语言:txt
复制
        StringWriter sWriter = new StringWriter();
代码语言:txt
复制
        xmlSer.Serialize(sWriter, dto);
代码语言:txt
复制
        return sWriter.ToString();
代码语言:txt
复制
    }
代码语言:txt
复制
    catch(Exception ex) {
代码语言:txt
复制
        throw ex;
代码语言:txt
复制
    }
代码语言:txt
复制
}

本文的其余部分看起来非常合理,但是try-catch-throw会抛出WtfException ... 这不完全等同于不处理异常吗?

人机工程学:

代码语言:txt
复制
public static string SerializeDTO(DTO dto) {
代码语言:txt
复制
    XmlSerializer xmlSer = new XmlSerializer(dto.GetType());
代码语言:txt
复制
    StringWriter sWriter = new StringWriter();
代码语言:txt
复制
    xmlSer.Serialize(sWriter, dto);
代码语言:txt
复制
    return sWriter.ToString();
代码语言:txt
复制
}

或者我错过了C#中的错误处理的基本知识?它几乎与Java相同(减去检查的异常),不是吗?...也就是说,他们都提炼了C ++。

堆栈溢出问题重新抛出无参数捕获和不做任何事情之间的区别?似乎支持我的观点,即尝试抛出是无效的。

编辑:

只是为了总结任何未来发现这个线程的人...

不要

代码语言:txt
复制
try {
代码语言:txt
复制
    // Do stuff that might throw an exception
代码语言:txt
复制
}
代码语言:txt
复制
catch (Exception e) {
代码语言:txt
复制
    throw e; // This destroys the strack trace information!
代码语言:txt
复制
}

堆栈跟踪信息对于确定问题的根本原因至关重要!

代码语言:txt
复制
try {
代码语言:txt
复制
    // Do stuff that might throw an exception
代码语言:txt
复制
}
代码语言:txt
复制
catch (SqlException e) {
代码语言:txt
复制
    // Log it
代码语言:txt
复制
    if (e.ErrorCode != NO_ROW_ERROR) { // filter out NoDataFound.
代码语言:txt
复制
        // Do special cleanup, like maybe closing the "dirty" database connection.
代码语言:txt
复制
        throw; // This preserves the stack trace
代码语言:txt
复制
    }
代码语言:txt
复制
}
代码语言:txt
复制
catch (IOException e) {
代码语言:txt
复制
    // Log it
代码语言:txt
复制
    throw;
代码语言:txt
复制
}
代码语言:txt
复制
catch (Exception e) {
代码语言:txt
复制
    // Log it
代码语言:txt
复制
    throw new DAOException("Excrement occurred", e); // wrapped & chained exceptions (just like java).
代码语言:txt
复制
}
代码语言:txt
复制
finally {
代码语言:txt
复制
    // Normal clean goes here (like closing open files).
代码语言:txt
复制
}

在更具体的例外之前抓住更具体的例外(就像Java一样)。

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档