c# - 为什么 Code Contracts 建议我要求参数为空?

标签 c# code-contracts

查看下面的代码示例,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/

相关文章:

visual-studio-2010 - 在 Visual Studio 2010 Professional 中为类库使用代码协定(即无静态检查)是多么好的主意?

code-contracts - 代码契约(Contract)试图获取构建错误而不是警告

c# - 组合框格式在文本框中显示选项卡,而不是在下拉列表中

c# - 有时在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 处超时 (...)

c# - SendGrid Parse API 和 SaaS 应用程序

c# - 紧凑框架: Fill Rectangle with solidbrush problem

c# - 如何为纯度设置异常属性?

c# - 捕获的 .NET 异常意外为空

c# - 将 Access 数据导入 SQL Server CE(.mdb 到 .sdf)

c# - 是否有代码契约(Contract)的替代方案来声明编码假设?