代码约定的条件属性异常

pho*_*tom 5 c# code-contracts

我在以下代码上使用代码契约时遇到异常:

public void Debug(
            dynamic message1, 
            dynamic message2 = null, 
            dynamic message3 = null, 
            dynamic message4 = null, 
            dynamic message5 = null, 
            dynamic message6 = null)
     {
         Contract.Requires(message1 != null, 
             "First Logged Message cannot be null");
     }
Run Code Online (Sandbox Code Playgroud)

我正在尝试配置项目设置,以便在运行时完成检查.

例外是"无法动态调用方法'需要',因为它具有条件属性".我已经多次重新阅读Code Contracts文档并完成了一些搜索,但我不明白条件属性的来源.

Mar*_*k H 11

Requires方法的条件属性是Conditional("CONTRACTS_FULL").在打开合同的情况下构建时,CONTRACTS_FULL符号将传递给编译器.我假设你不能使用条件方法动态调度的原因是因为它们是在运行时编译的,并且运行时无法将这些符号传递给编译器.(只是一个猜测).

通过将message1分配给本地(非动态)变量(可能是对象),您可以很容易地解决它.

     object m1 = message1;
     Contract.Requires(m1 != null, "First Logged Message cannot be null");
Run Code Online (Sandbox Code Playgroud)