【问题标题】:Is there a shorter way to Try Catch ex As Exception in single line VB.NET?在单行 VB.NET 中尝试 Catch ex As Exception 是否有更短的方法?
【发布时间】:2020-06-19 23:27:33
【问题描述】:

例如,当我需要处理多个异常时,以下方式会占用更多空间。 在单行 VB.NET 中尝试 Catch ex As Exception 是否有更短的方法?也许像Try objSize = obj.Size Catch ex As Exception objSize = 0

此外,如果有人可以分享 vb.net 中错误处理的最佳实践,我们将不胜感激。谢谢。

Try
    objSize = obj.Size
Catch ex As Exception
    objSize = 0
End Try

【问题讨论】:

  • 为什么要在一行中完成?它使代码更难阅读和理解,除了几个回车键之外不保存任何击键,并且不会使您的代码执行得更快。当您无法清楚地看到代码中的执行流程时,它也会使调试变得更加困难,您可以在最后发布的代码块中看到。
  • 我完全同意@KenWhite 但如果有很多处理程序我需要放置类似于这个的代码行数会急剧增加。并且我明白不同的错误处理程序进入不同的 try 和 catch 块。
  • 代码行没有意义。可读性更为重要。
  • 最佳实践是相当主观的,但我建议不要按照您的示例使用异常处理来进行流控制和验证。在异常处理进入之前检查 obj.size 的值是否有效会更有效
  • 同意@Hursey - 可能你正在使用 Try/Catch 做的比它应该做的更多。 Andex,也许您应该添加更多相关代码来解释为什么这对您很重要。似乎缺少一些上下文。

标签: vb.net error-handling


【解决方案1】:

cmets 对这里的问题有很好的讨论,每个人都提出了有效的观点。

代码抛出异常的唯一方法是在检索对象大小时抛出异常。如果它抛出异常,你唯一要做的就是将大小设置为 0。因此,如果它要抛出异常,你应该让 object.Size 返回 0。最好不要抛出不必要的异常,因为它们很昂贵。

但是,您可以声明一个将其他子作为参数的子:

Sub TryCatch(t as Action, c as Action)
    Try
        t()
    Catch 
        c()
    End try
End Sub

然后将您以前尝试捕获的代码行捕获为 subs:

Dim objSize = 0

TryCatch(Sub() objSize = obj.Size, Sub() objSize = 0)

或者你可以使用 c# ;)

【讨论】:

    【解决方案2】:

    这是一行的示例Try .. Catch

    Try : objSize = obj.Size : Catch ex As Exception : objSize = 0 : End Try
    

    我只是想知道你将如何调试你的代码,如果它只是 在更大的应用程序中会这样吗?!

    【讨论】:

      【解决方案3】:

      如何做到这一点的答案是根本不使用 try catch 块。

       objSize = If(obj?.Size, 0)
      

      在这种情况下你需要它吗?

      如果你不喜欢这个语法,那就是这个

       objSize =(obj?.Size).GetValueOrDefault
      

      无论哪种方式,try catch 块都是为了从未知错误中恢复,而不是那些可以通过简单更改代码外观更容易处理的块。

      【讨论】:

        猜你喜欢
        • 2013-08-12
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        • 1970-01-01
        相关资源
        最近更新 更多