微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 通过Contract.Ensures()声明返回非空序列时阻止Resharper警告?

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

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的警告,如上面的代码注释中所述.

这类似于the question here:,但我已尝试在该问题的答案中应用此修复程序,但它并未解决此特定问题.

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

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

(我已经检查了几台机器,它发生在所有机器上.Villa安装了R# – 除了我尝试应用上面链接的答案中的修复程序之外,我们没有修改任何XML文件.)

更多的信息:

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

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

解决方法

问题在于,尽管ReSharper ExternalAnnotations涵盖了大多数代码契约,但Ensures不是其中之一(即使在任何浮动的自定义xmls中也是如此).

我只是从最新的ReSharper v8 EAP中检查了ExternalAnnotations,它们仍然与v7.1.3完全相同 – 所以到目前为止一切都没有改变.

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

更新:Code Contracts Ensures for ReSharper ExternalAnnotations

最终:它根本不可行 – 只是因为属性在某种程度上需要隐含在包含代码契约的方法中,而不是代码契约本身内部的内容……

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐