我应该使用哪种,CodeContract还是CuttingEdge.Conditions?

时间:2012-02-19 09:01:02

标签: c# code-contracts

我研究了使用条件框架来验证数据而不是

if(cond) throw new SomeException();

SomeFramework.MakeSure(cond);

最后,我的选择是使用CodeContractCuttingEdge.Conditions框架。

我无法决定使用哪个框架。我可以告诉你,我不喜欢'CodeContract'框架,你必须安装额外的msi才能使用它和你需要选择的选项;不是那么糟糕,但感觉不自然。 (当然它仍在MS研究中。)

您怎么看?

3 个答案:

答案 0 :(得分:12)

CodeContracts框架是.NET 4的一部分。因此,您可以编写代码而无需安装任何内容,只是没有重写器组件,代码协定在运行时不会产生任何影响。我将此包含在框架中,作为微软打算在未来更多地整合代码合同的标志。

根据CuttingEdge.Conditions CodePlex page的统计数据,仅下载了4,189次。语法有一些很好的东西,但除非CuttingEdge.Conditions而不是CodeContracts特别支持某些内容,否则您可能会坚持使用.NET的一部分版本。

就我而言,代码合约的主要特征如下:

  1. 您可以在接口上设置代码合约,以指定实现这些接口的类型的预期行为。

  2. 代码合同是继承的。

  3. 我没有尝试过CuttingEdge.Conditions,但是它支持这两个功能并不明显(而CodeContracts确实如此)。

答案 1 :(得分:10)

主要区别在于代码合同包括静态检查程序。这意味着您的合同将在编译时检查是否正确。

此外,只要您构建.NET 4,您的用户就不需要安装任何东西。重写器在编译时工作,CC的其余部分是.NET的一部分。

答案 2 :(得分:5)

修改:我建议人们使用https://github.com/adamralph/liteguard

CuttingEdge.Conditions已经分叉成为条件。原作者不再维护或使用该项目:https://conditions.codeplex.com/workitem/20064

CodeContracts未在Mono中实现。有一个GSOC项目,但它没有最终得到一个完整的解决方案所以条件是你唯一的选择,如果针对Xamarin.iOS / Xamarin.Android / Xamarin.Mac平台或只是单声道。

该库现在是一个可移植的类库,默认情况下跨平台支持位于:

https://github.com/ghuntley/Conditionshttps://www.nuget.org/packages/Conditions/