我应该添加对刚刚传递给另一个方法的参数的检查吗?

时间:2013-04-12 10:17:34

标签: c# code-contracts

考虑这两种方法

public int GetSomething(object obj)
{
    Contract.Requires<ArgumentNullException>(obj != null);

    ...
}

public int GetSomethingWrapper(object anotherObj)
{
    var obj = GetObj(anotherObj);
    return GetSomething(obj);
}

让我们考虑GetObj是安全的,即它不会抛出任何例外 因此,如果obj为null,则GetSomethingGetSomethingWrapper抛出execption。但在后一种情况下,例外的起源是GetSomething方法。

问题是我是否要为GetSomethingWrapper添加支票? 一方面:不关心它的业务。另一方面:两种方法都是公共的,但包装器方法的调用者没有合同信息。

1 个答案:

答案 0 :(得分:3)

  

一方面:不关心它的业务。

是的 - 它正在调用一个合同的方法,因此它应该遵守该合同。遵守合同最简单的方法是强制签订自己的合同。

然后正如你所说的那样,当前GetSomethingWrapper没有合同的额外问题,所以 应该合法使用null参数调用它......但实际上并非如此。< / p>

所以基本上,是的 - 我也将合同添加到GetSomethingWrapper。其调用GetSomething实施细节不应影响公共合同。