查看下面的代码示例,Microsoft Code Contracts警告:


  CodeContracts:在非常可见的方法中缺少前提条件。
  考虑添加Contract.Requires(science == null);用于参数
  验证


我在这里想念什么吗? CC为什么会建议我要求参数为null,这与此处应做的工作完全相反?

我正在使用VS2015,.NET 4.6。

using System;
using System.Diagnostics.Contracts;
public sealed class Weird
{

    public Weird(object science)
    {
        if (null == science)
        {
            throw new ArgumentNullException();
        }

        Contract.EndContractBlock();

        this.Science = science;
    }
    private object Science { get; }

    [ContractInvariantMethod]
    private void ObjectInvariant()
    {
        Contract.Invariant(null != this.Science);
    }
}

最佳答案

这不是比您的解决方法更好的答案,但是我通过简单地更改使其“起作用”:

private object Science { get; }


至:

private object Science { get; set; }


基本上与您的解决方法相同,但是没有提供您自己的支持字段。我猜想Code Contracts不太了解新语法。

09-25 21:44