【问题标题】:Code Contracts warning not showing代码合同警告未显示
【发布时间】:2012-05-22 11:50:10
【问题描述】:

我有这个简单的代码:

public ArrayStack(int capacity)
    {
        Contract.Requires(capacity >= 0);
        Contract.Ensures(_items != null);
        Contract.Ensures(_items.Length == capacity);
        _items = new T[capacity];
        _top = -1;
    }

我预计一旦我键入以下内容,我会收到一个编译时警告,但我只从合约中得到一个运行时异常。

static void Main(string[] args)
    {
        int i = -1;
        ArrayStack<string> stack = new ArrayStack<string>(i);

    }

有什么想法吗?

已编辑:我的代码合约设置图片

【问题讨论】:

  • 愚蠢的问题,但你真的在运行验证器吗? (你的设置是什么等?)
  • @JonSkeet - 当然我实际上标记了那里的所有内容:) 我正在获得运行时验证。设置中有什么需要特别注意的吗?
  • 添加了设置页面图片
  • 对我来说,使用默认合同设置的代码的最小测试版本会在后台检查完成后给出预期的错误...

标签: c# .net code-contracts


【解决方案1】:

想通了。

看来编译器太聪明了,看到最后一行之后没有人在使用堆栈,所以他没有检查它。

一旦我添加了 stack.push(...) 它就会给我错误...

电脑不能太聪明...

【讨论】:

    【解决方案2】:

    如果你想要波浪线,那么你必须检查“显示波浪线”:

    重新构建项目,等待静态分析完成,您将在“输出”窗口中看到两个警告(如果您没有运行 VS 的“终极”版本,这些很容易错过)以及可疑代码下的行。

    [编辑]顺便说一句,我总是使用“标准合同要求”组装模式运行。

    然后在示例构建之后:

    在 IDE 中:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      相关资源
      最近更新 更多