回答

收藏

您如何使用C#滚动捕获异常

技术问答 技术问答 567 人阅读 | 0 人回复 | 2023-09-14

给出以下代码:
) r( X5 G+ l: c: P) Lusing (var conn = new SqlConnection("...")){    conn.Open();     using (var cmd = conn.CreateCommand()cmd.CommandText = "...";        using (var reader = cmd.ExecuteReader())                                          while (reader.Read())()))                                 ...               我习惯于编写数据访问try / catch /) R# J& q- `$ x9 o6 z1 o+ p
finally然而,我很容易接触到使用,这似乎是一种更简单的方法。然而,我试图找出如何捕捉可能的异常。( P" J0 Q% s) u0 }8 T" b9 w! }
你能举个例子来解释如何捕获异常吗?
5 ]1 w- r( h! O: G& j编辑添加:
! Z' w1 _( w0 s我认为使用取代了它try / catch / finally块。我知道使用不会捕捉异常。那么,这是替代品吗?, S3 j0 P) }5 O, l
                                                               
6 [7 s% W! Q- h2 M  J4 Y4 M. \$ R    解决方案:                                                                5 b+ S1 P3 m5 U) m3 a- U
                                                                using不是为了捕捉异常而设计的;它旨在为您在未来提供一个简单的方法try/包裹finally在需要处理的物体周围。如果需要捕获和处理异常,则需要将其扩展到完整的状态try/
: X/ a$ ^5 X) \) M8 i) m2 s0 hcatch/finally或在整个内容中添加一个包含try/ catch。* y- J" v; r- i% P+ A
回答你的编辑(using代替try/ catch/
2 s! s3 h" e: A' Cfinally?),否则,不是。在大多数情况下,当你使用一次性资源时,你不会处理异常,因为通常没有有用的方法可以做。因此,它提供了一种简单的方法来确保资源的清除,无论您想要执行的操作是否有效。
( q; f" @' @" E; D# S# B' |  F一般来说,处理可处理资源的代码工作水平太低,无法确定失败的正确操作。因此,异常情况将留给调用人,后者可以决定采么操作(如重试、失败、记录等)。
! {$ U$ Q6 X* D8 t4 U: M7 [5 A" b4 G)。您倾向于使用catch如果你想翻译异常(这是我假设的数据访问层正在做的),那么带有可处理资源的块唯一的地方就是。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则