elr*_*anu 15 c# code-contracts
我有以下方法:
private void DoSomething(CoolClass coolClass)
{
if (coolClass == null)
{
throw new ArgumentNullException("coolClass");
}
coolClass.Name = "Pepe";
}
Run Code Online (Sandbox Code Playgroud)
使用代码契约,我们可以这样写:
private void DoSomething(CoolClass coolClass)
{
Contract.Requires<ArgumentNullException>(coolClass != null, "IS NULLL!");
coolClass.Name = "Pepe";
}
Run Code Online (Sandbox Code Playgroud)
第二种方法更短更简单.我遇到的问题是,当你构建它时,在运行时它不会抛出异常,它显示了这个:
说明:必须使用代码契约二进制重写器(CCRewrite)重写程序集(可能是"CodeContractsTest"),因为它正在调用Contract.Requires并且定义了CONTRACTS_FULL符号.从项目中删除CONTRACTS_FULL符号的任何显式定义并重建.CCRewrite可以从http://go.microsoft.com/fwlink/?LinkID=169180下载.安装重写器后,可以从"代码约定"窗格上项目的"属性"页面在Visual Studio中启用它.确保启用"执行运行时合同检查",这将定义CONTRACTS_FULL.
除非使用VS,否则请从此处下载.net的CodeContracts .
然后检查项目中的"运行时检查",以便在运行时构建它时,抛出异常.
我们的应用程序是使用Jenkins和PowerShell脚本构建的.有没有办法检查运行时并抛出异常,使用简单的命令或属性,或者简单的东西?
通过更改以下项目属性,我可以在运行时消除此异常.
右键单击项目 - >属性 - >代码合同(Tab)将组装模式更改为"标准合同要求"也选择复选框 - 执行运行时合同检查
如果您喜欢简单性,为什么不编写自己的方法版本呢?
public class CustomContract
{
public static void Requires<TException>( bool Predicate, string Message )
where TException : Exception, new()
{
if ( !Predicate )
{
Debug.WriteLine( Message );
throw new TException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用代码合约只是为了拥有一个友好的 API,听起来就像用大炮射麻雀。
| 归档时间: |
|
| 查看次数: |
14924 次 |
| 最近记录: |