有代码合同的条件属性例外

我在下面的代码中使用代码合同时收到异常:

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");
     }

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

例外是“无法动态调用方法”需要'因为它具有条件属性“。 我几次重新阅读代码合同文档并完成了一些搜索,但我不明白条件属性来自哪里。


Requires方法的条件属性是Conditional("CONTRACTS_FULL") 。 当您打开合同时,CONTRACTS_FULL符号被传递给编译器。 我假设你不能在条件方法中使用动态分派的原因,是因为它们是在运行时编译的,运行时无法将这些符号传递给编译器。 (只是猜测)。

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

     object m1 = message1;
     Contract.Requires(m1 != null, "First Logged Message cannot be null");

我遇到同样的问题,而不是创建一个变量赋值我可以将动态转换为requires条件参数中的对象。

dynamic message1;
Contract.Requires((object)message1 != null,"First Logged Message cannot be null"); 
链接地址: http://www.djcxy.com/p/59597.html

上一篇: Conditional Attribute Exception with Code Contracts

下一篇: Does Sandcastle support code contracts?