这是我的问题。我非常喜欢通过契约设计来开发库,尤其是可以被其他开发人员使用的库。我刚刚发现了一种新的方法,那就是使用Contract.Requires
而不是Exception
:
public void SomeMethod(string name){
if(name==null) throw new NullArgumentException("Null values not supported");
}
我现在有:
public void SomeMethod(string name){
Contract.Requires(name != null);
}
编辑:我正在使用VS2010的调试模式。
问题:即使name
为null
,Contract.Requires
也不起作用!
MSDN文档中说:
指定封闭方法或属性的前置条件契约。
但是如果未满足条件,则没有任何说明!
我还注意到其他的Contract.Requires
有抛出异常、显示消息等重载,那么Contract.Requires(Boolean)
是用来做什么的呢?
编辑 下面的回答强调必须安装插件才能使用完整的Contract
API,但那么使用Mono平台的用户该怎么办,想要他们的代码在不同平台上表现相同?