验证参数的正确顺序是什么?

本文关键字:顺序 是什么 参数 验证 | 更新日期: 2023-09-27 18:17:08

作为参考,我想指出这个问题是考虑到如何测试参数的。

让我们以下面两个片段为例:

public void DoSomething1(Dictionary<string, string> param1, Object param2)
{
    if (null == param1)
        throw new ArgumentNullException("param1");
    if(!param1.Keys.Contains("somekey"))
        throw new ArgumentException("param1 must contain key '"somekey'"");
    if(null == param2)
        throw new ArgumentNullException("param2");
    // now we do some stuff
}
public void DoSomething2(Dictionary<string, string> param1, Object param2)
{
    if (null == param1)
        throw new ArgumentNullException("param1");
    if (null == param2)
        throw new ArgumentNullException("param2");
    if(!param1.Keys.Contains("somekey"))
        throw new ArgumentException("param1 must contain key '"somekey'"");  
    // now we do some stuff
}

两个方法将完成对方法内部工作的相同保护。

测试传递给方法的参数(如本例)的正确方法/顺序是什么?为什么要?

请引用参考文献来备份你的答案

验证参数的正确顺序是什么?

没有"正确的顺序"

它完全是特定于实现的。换句话说,是报告参数为空更重要,还是深入检查参数更重要?

如果我这样做,我会采取"性能"的方法。换句话说,我将首先测试所有必要的参数是非空的,然后我将打开每个参数以确保我得到了我想要的。做null引用检查比测试字典是否包含键要快(稍微快一点)。

当然,我唯一担心的是,如果这个方法注定要在一秒钟内被调用数百次,并且它有可能被传递空参数。对于影响有限的方法,我会坚持使用调用者首先需要知道的内容。