通过contract . ensure()声明非空序列返回时防止Resharper警告

本文关键字:返回 警告 Resharper ensure contract 声明 通过 | 更新日期: 2023-09-27 18:14:32

我使用Code Contracts来声明一个属性返回一个非空字符串序列,如下所示:

public IEnumerable<string> Filenames
{
    get
    {
        Contract.Ensures(Contract.Result<IEnumerable<string>>() != null);
        // Next line gives Resharper Warning
        // "Possible null assignment to entity marked with 'not null' attribute":
        Contract.Ensures(Contract.Result<IEnumerable<string>>().Any());
        return new []{"TEST"}; // Dummy data for demo purposes.
    }
}

我收到Resharper的警告,如上面的代码注释所述。

这与这里的问题类似:,但我已经尝试在回答这个问题时应用修复,它没有解决这个特定的问题。

有谁知道如何解决这个问题(除了使用Resharper注释来抑制警告)?

我正在使用Resharper 7.1.2 c# Edition, build 7.1.2000.1478

(我检查了几台机器,所有机器都发生了这种情况。r#的香草安装-我们没有修改任何XML文件,除了我试图应用我上面链接的答案的修复)

进一步信息:

我正在尝试使用Visual Studio 2012更新2,使用。net 4.0和。net 4.5。

另外,您需要将条件编译符号"CONTRACTS_FULL"添加到项目的Build设置中(在"条件编译符号"文本框中)。

通过contract . ensure()声明非空序列返回时防止Resharper警告

问题是,尽管大多数代码契约都包含在ReSharper ExternalAnnotations中,但确保是不是其中之一(甚至不在任何自定义xml中浮动)。

我刚刚仔细检查了最新ReSharper v8 EAP的ExternalAnnotations,它们仍然和v7.1.3完全一样——所以到目前为止绝对没有任何改变。

我将提出一个新问题,询问是否有人知道如何实现它。

UPDATE: Code Contracts for ReSharper ExternalAnnotations

FINAL:这是不可行的——仅仅因为该属性需要以某种方式隐含在包含代码契约的方法中,而不是代码契约内部的内容…