gpt4 book ai didi

c# - 处理或不处理异常的空参数

转载 作者:太空狗 更新时间:2023-10-29 20:08:16 24 4
gpt4 key购买 nike

我记得读过一些异常处理指南,其中不鼓励检查空参数。这样做的理由是,如果您按原样保留代码,则在您尝试使用该参数时会引发异常 (NullReferenceExcpetion)。替代方法是显式检查 null 并抛出 ArgumentNullException。

这会产生相同的效果,但您是对的额外代码行。您永远不会编写代码来处理任何一个异常,因此您在测试时确实会在运行时遇到这些异常,然后修复代码以首先阻止异常发生。

我并不是说我同意该指南,但当我第一次阅读它时它确实很有意义,现在仍然很有意义。

我通常只在非私有(private)方法上检查空参数,而让私有(private)方法抛出 NullReferenceException。

有谁知道这方面是否有任何明确/事实上的最佳指导实践,以便我可以在需要时更新我的​​方法?

最佳答案

This gives the same effect but you're right extra lines of code

不,它没有。考虑:

public void TransferMoney(Account from, Account to, decimal amount)
{
from.Debit(amount);
to.Credit(amount);
}

对比

public void TransferMoney(Account from, Account to, decimal amount)
{
// Ideally do them separately
if (from == null || to == null)
{
throw new ArgumentNullException();
}

from.Debit(amount);
to.Credit(amount);
}

两者都会因异常而失败 - 但第一个会失败首先导致副作用。这很糟糕,应尽可能避免。

(显然,在真实场景中,这可能是事务性的,不会造成真正的伤害,但你接受我的观点。)

另外,如果一个参数被用作另一个方法的参数——或者更糟的是,存储起来供以后使用——你最终可能会从一个完全不同的地方抛出异常,在一个可能使它完全不明显的原始问题是什么的方式。

I generally check for null parameters on non-private methods only but leave private methods to throw a NullReferenceException.

这似乎是一个相当合理的政策。如果从一些复杂的代码中调用私有(private)/内部方法,并且我担心我可能把事情搞砸了,我有时甚至会验证它。

关于c# - 处理或不处理异常的空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9617451/

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