我在思考是应该抛出异常还是调用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
符号,因此我也可以在发布版本中使用它。
这是我的考虑:
缺点: 无法调用定制异常类型构造函数的重载版本。 没有办法向构造函数传递其他参数。
优点: 支持静态工具(例如通知调用者违反协定)。
我应该使用哪一个,以及在什么情况下使用?