查看下面的代码示例,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不太了解新语法。