我被教导大部分时间总是从我的代码中删除try/catch/finally块.这背后的原因总是对我有意义(如果你的应用程序以它应该的方式工作,你不需要防止错误),但同时有很多东西可能导致错误,而不是由于差编码; 服务器打嗝,图形似乎永远不会失败,因为没有明显的原因失败,等等.我也被告知这些块可以降低性能,当我使用它时没有我个人注意到,但我想这可能是案件.基本上我得到的是; 尝试/捕获/最后一个糟糕的整体想法或在某些情况下好的另一个好,如果过度使用不良代码以保持应用程序漂浮,有利于测试/生产不好?只想要一些输入.
有些情况下你无法避免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; } }
如果没有上述方法就行不通try/catch
.
另一个重要用法try/finally
是with using
语句,using
与那些实现IDisposable
接口并转换为try/finally
块的对象一起工作,因此如果发生异常,它将确保处理非托管资源.
通常只捕获那些异常,如果你想对它们做一些有用的事情,否则让异常冒泡