4

我使用代码合同来声明一个属性返回一个非空、非空的字符串序列,如下所示:

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# 版,构建 7.1.2000.1478

(我已经检查了几台机器,并且在所有机器上都发生了这种情况。R# 的香草安装 - 除了我试图应用我上面链接的答案中的修复程序之外,我们没有修改它的任何 XML 文件。)

更多的信息:

我正在使用带有更新 2、.Net 4.0 和 .Net 4.5 的 Visual Studio 2012 尝试此操作。

此外,您需要将条件编译符号“CONTRACTS_FULL”添加到项目的构建设置中(在“条件编译符号”文本框中)。

4

1 回答 1

1

问题在于,尽管 ReSharper ExternalAnnotations 涵盖了大多数代码合同,但 Ensures不是其中之一(甚至在任何浮动的自定义 xml 中都没有)。

我刚刚从最新的 ReSharper v8 EAP 中仔细检查了 ExternalAnnotations,它们仍然与 v7.1.3 中的完全相同 - 所以到目前为止绝对没有任何变化。

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

更新: 代码合同确保 ReSharper ExternalAnnotations

最终:这根本不可行 - 只是因为属性需要以某种方式隐含在包含代码合同的方法中,而不是代码合同本身的内容......

于 2013-06-23T03:43:53.317 回答