gpt4 book ai didi

vb.net - 捕获NullReferenceException或首先测试Nothing?

转载 作者:行者123 更新时间:2023-12-04 03:34:44 24 4
gpt4 key购买 nike

我们有一个属性,其工作是查找描述。如果查找失败,则应显示一个空字符串。

因此,我们可以像下面这样编码属性:

If foo.bar Is Not Nothing Then
Return foo.bar.Description
Else
Return String.Empty
End If

但这涉及两次执行foo.bar,如果这样做很昂贵,那么可能会像这样更好:
Dim b As bar = foo.bar
If b IsNot Nothing Then
Return b.Description
Else
Return String.Empty
End If

但是实际上我们要做的就是将任何类型的错误都视为一个空的描述。因此,从某些方面来说,这更简单:
Try
Return foo.bar.Description
Catch e As NullReferenceException
Return String.Empty
End Try

但是,仅捕获并忽略该错误是否有任何问题(性能,纯度或其他?)?

您有时会读到抛出异常的代价很高,但是我不确定作者是否意味着使用 Throw关键字构建异常的代价很高(我没有这样做),或者他是否意味着允许发生异常的代价很高(就像我会的那样)在做)。

最佳答案

如果肯定要测试Nothing而不是在这里依赖异常。您的代码表明foo.barNothing的方案是预期的方案,而不是异常(exception)的方案。这样的答案。

抛出异常是一个相对昂贵的操作(从性能角度来看)。无论是在代码中扔掉它还是在库代码中扔掉,都是这种情况。这是完全相同的操作。但是,除非有真实,可衡量的关键业务案例,否则我不会出于性能原因而抛出异常。

我认为这主要是出于意图的考虑。通过测试Nothing并对其进行适当的处​​理,您的代码表示以下事实:这不是一件奇怪的事情。

如果您担心两次执行foo.bar的性能,那么要做的第一件事就是找出是否确实如此。如果是这样,可能有解决的方法(您的代码示例已经包含建议)。

关于vb.net - 捕获NullReferenceException或首先测试Nothing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4164034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com