C#Try/Catch/Finally

Vol*_*rix 4 c# standards coding-style try-catch

我被教导大部分时间总是从我的代码中删除try/catch/finally块.这背后的原因总是对我有意义(如果你的应用程序以它应该的方式工作,你不需要防止错误),但同时有很多东西可能导致错误,而不是由于差编码; 服务器打嗝,图形似乎永远不会失败,因为没有明显的原因失败,等等.我也被告知这些块可以降低性能,当我使用它时没有我个人注意到,但我想这可能是案件.基本上我得到的是; 尝试/捕获/最后一个糟糕的整体想法或在某些情况下好的另一个好,如果过度使用不良代码以保持应用程序漂浮,有利于测试/生产不好?只想要一些输入.

Hab*_*bib 5

有些情况下你无法避免Try/Catch,

考虑一种情况,您希望用户输入要在数据库表中输入的一些数据.用户的输入也包括主键,现在,如果某个用户输入了重复的主键,您将获得异常.你现在要做什么 ?让系统崩溃或处理异常并向用户显示用户友好的消息,以输入不同/唯一的内容.

考虑一个示例,假设您要检查某个URL是否有效且可用,您可能需要一些方法,如:( 从此处获取)

private bool IfURLExists(string url)
{
    try
    {
        HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
        request.Method = "HEAD";
        HttpWebResponse response = request.GetResponse() as HttpWebResponse;
        return (response.StatusCode == HttpStatusCode.OK);
    }
    catch //may catch specific WebException First
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有上述方法就行不通try/catch.

另一个重要用法try/finally是with using语句,using与那些实现IDisposable接口并转换为try/finally块的对象一起工作,因此如果发生异常,它将确保处理非托管资源.

通常只捕获那些异常,如果你想对它们做一些有用的事情,否则让异常冒泡

  • @Volearix:事先检查会转储,因为它可能会在检查和执行之间发生变化.并序列化所有内容,以便您可以事先正确检查并确保它不会改变将是非常愚蠢的. (3认同)
  • @Volearix和deterministicFail,它只是一个例子.... (2认同)
  • @deterministicFail,删除了示例并添加了一些新内容. (2认同)