加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:51:08 所属栏目:百科 来源:网络整理
导读:我正在使用代码约定来声明一个属性返回一个非空的,非空的字符串序列,如下所示: public IEnumerablestring Filenames{ get { Contract.Ensures(Contract.ResultIEnumerablestring() != null); // Next line gives Resharper Warning // "Possible null assig
我正在使用代码约定来声明一个属性返回一个非空的,非空的字符串序列,如下所示:

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读