gpt4 book ai didi

c# - 参数验证最佳实践

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

假设您有一个应用程序,它是您所有业务逻辑的某种前端。这个前端有很多它所依赖的 DLL,并且这些 DLL 中的方法可能会在前端中一次执行给定方法时重复调用彼此。如果您的应用程序的用户不直接访问那些 DLL,您是否应该...

1) 冒着(小的)性能影响的风险,并在每种方法中验证参数,即使您最终可能会验证相同的参数大约 5 次;或

2) 冒意外行为的风险,并假设在您验证输入参数时,传入和传出您的内部代码的所有其他可能参数都是有效的(例如,既不为 null 也不为空)?

编辑:举个例子,假设你有一个正则表达式 RegexA 和一个方法

internal bool Matches(string expression)
{
return RegexA.IsMatch(expression);
}

IsMatch 将在 null 参数上抛出异常,但不会在空字符串上抛出异常。如果您事先知道空字符串永远不会与该正则表达式匹配,那么您是否应该使用 if (String.IsNullOrEmpty(expression)) 之前,即使知道它可能在 IsMatch框架方法?在这种情况下,您显然是在重复验证,但是重复还是冒险更好?

最佳答案

通常参数检查非常廉价,即使调用数千次也是如此。例如,测试一个值是否为空,一个字符串或集合是否为空,一个数字是否在给定范围内。

但要注意检查可能昂贵,所以三思而后行:在大字符串上评估正则表达式,检查文件是否存在,检查集合中的所有元素满足一定条件。

我也只建议只检查公共(public)或 protected 方法。请注意,所有带有未经检查参数的公共(public)方法都是潜在风险!

编辑/另一个想法:如果一个方法不使用参数但只是将其传递到另一个方法,那么您也可以省略检查。只有为自己实际使用这些参数的方法才应该进行检查。

这是因为如果参数要求发生变化,您需要在多个地方更改验证,从而冒着不一致的风险。

关于c# - 参数验证最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6510171/

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