我想要了解Code Contracts的优势。我已经编写了以下代码(来自PEX + Code Contract介绍)来挖掘它。
public static string TrimAfter(string value, string suffix)
{
// <pex>
Contract.Requires(suffix != (string)null);
Contract.Requires
(value.IndexOf(suffix) >= 0 && value.Length >= value.IndexOf(suffix));
Contract.Requires(value != (string)null);
// </pex>
int index = value.IndexOf(suffix);
if (index < 0)
return value;
return value.Substring(0, index);
}
我用nulls参数调用了这个方法,它被编译了。 所以我不清楚为什么抛出异常会更好。 如果Code Contracts真的有任何其他功能,你能解释一下吗? :) 提前谢谢。
答案 0 :(得分:3)
除了提出的其他要点之外,合同可以应用于界面(你不能通过常规例外),并通过继承强制执行(其他一些你很难用常规做的事情)例外)。
答案 1 :(得分:2)
另一方面,解析IL识别旧标准模式以进行前置条件检查并使用生成文档时,应该不难。
答案 2 :(得分:1)
为了不让它编译,您需要使用静态检查器的高级版代码合同:http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
答案 3 :(得分:1)
我猜,但是,从文档:
Visual Studio加载项允许您指定要执行的代码协定分析级别。分析器可以确认合同格式正确(类型检查和名称解析),并可以生成Microsoft中间语言(MSIL)格式的合同的编译形式。在Visual Studio中创作合同使您可以利用该工具提供的标准IntelliSense。
可以使用工具here。