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

时间:2011-12-08 21:40:01

标签: c# exception-handling theory

作为参考,我想指出this question被考虑用于如何参与者的测试。

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

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
}

两种方法都将对方法的内部工作方式实现相同的保护。

我的问题是......

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

请引用备用答案的参考资料。

1 个答案:

答案 0 :(得分:0)

没有“正确的订单”。

完全针对具体实施。换句话说,更重要的是要报告参数是否为空或者在进入参数时对参数进行深度检查更重要?

如果我这样做,我会采取“表现”的方法。换句话说,我首先测试所有必要的参数都是非null,然后我会打开每个参数以确保我得到了我想要的。执行空引用检查比检测字典是否包含密钥更快(稍微)。

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