查看下面的代码示例,Microsoft Code Contracts 警告:
CodeContracts: Missing precondition in an extremely visible method. Consider adding Contract.Requires(science == null); for parameter validation
我是不是漏掉了什么?为什么 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 不太理解新语法。
关于c# - 为什么 Code Contracts 建议我要求参数为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32851460/