我不知道我是否应该抛出异常,或致电Contract.Requires<TException>
抛出异常vs合同。需要<T>?
例如:
public static void Function(String str)
{
if (str == null) throw new ArgumentNullException("str", "Input string cannot be null.");
// ...
}
VS
public static void Function(String str)
{
Contract.Requires<ArgumentNullException>(str != null, "Input string cannot be null.");
// ...
}
由于Contract.Requires<TException>
不需要CONTRACTS_FULL
符号,我可以把它放在我的发布版本也是如此。
这是我的考虑:
缺点:不能调用自定义异常类型的构造函数的重载版本。根本没有办法将其他参数传递给构造函数。
专业版:静态工具支持(例如通知调用者违反合同)。
我应该使用哪一个,以及是哪种情况?
“重载异常类型构造函数”有什么好处? – 2013-03-01 14:58:35
@PeterRitchie我认为这些构造函数存在的原因相同。我猜是因为它提供了更多的数据/信息。 – MasterMastic 2013-03-01 15:04:10
我不明白你有关重载异常类型的问题。另外,您可能误解了Contract.Requires的用法。如果使用过载,您仍然需要在释放的位上使用这些工具。如果不使用CodeContract工具重写DLL,它不会达到您的期望。 –
2013-04-26 22:13:29