gpt4 book ai didi

c# - 在哪里验证方法的参数?

转载 作者:可可西里 更新时间:2023-11-01 07:45:01 24 4
gpt4 key购买 nike

我想知道,在代码中验证方法参数的位置和频率。

在下面的示例类(.dll 库)中,您认为最好的方法是什么?假设我想验证某些对象不能为 null(但它可以是方法正常运行所需的任何其他验证)。最好只在第 1 点检查一次,在用户可用的公共(public)方法中,然后“相信自己”,在其他私有(private)方法中,它不会为空,或者最好有点偏执,每次检查一次它将被使用的时间(在第 2、3 和 4 点中)

在使用对象之前检查它(第 2、3、4 点)可以保护我将来,如果我决定更改类中的某些内容,使用这些私有(private)方法并“忘记”传递有效对象。如果我将来添加一些新的公共(public)方法,我也不必记住验证。另一方面 - 它一遍又一遍地检查相同的条件。或者您有其他建议吗?

public class MyClass()
{
public MyClass()
{
}

public void ProcessObject(SomeObject obj)
{
//1. if (obj == null) throw new ArgumentException("You must provide valid object.");

DoSomething(obj);
DoMore(obj);
DoSomethingElse(obj);
}

private void DoSomething(SomeObject obj)
{
//2. if (obj == null) throw new ArgumenException("You must provide valid object.");
//do something with obj...
}

private void DoMore(SomeObject obj)
{
//3. if (obj == null) throw new ArgumentException("You must provide valid object.");
//do something with obj...
}

private void DoSomethingElse(SomeObject obj)
{
//4. if (obj == null) throw new ArgumentException("You must provide valid object.");
//do something with obj..
}
}

最佳答案

如果您公开供其他开发人员使用的 API,那么您确实应该在每个方法上抛出 ArgumentExceptionArgumentNullException

如果它是其他开发人员不会直接与之交互的内部类或方法,我会使用 Debug.Assert,因此在 Debug模式下您可以获得额外的调试信息,而在 Release模式下它会被删除离开,您将获得不在所有地方进行所有这些参数检查的性能优势。

关于c# - 在哪里验证方法的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073900/

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