我想知道是否应该抛出异常或调用Contract.Requires<TException>
例如:
public static void Function(String str)
{
if (str == null) throw new ArgumentNullException("str", "Input string cannot be null.");
// ...
}
对比
public static void Function(String str)
{
Contract.Requires<ArgumentNullException>(str != null, "Input string cannot be null.");
// ...
}
由于Contract.Requires<TException>
不需要CONTRACTS_FULL
符号,我也可以将其保留在我的发布版本中。
这是我的考虑:
缺点:您不能调用自定义异常类型构造函数的重载版本。根本没有办法将额外的参数传递给构造函数。
Pro:静态工具支持(例如通知调用者违反合同)。
我应该使用哪一个,在什么样的情况下?