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 最终:它根本不可行 – 只是因为属性在某种程度上需要隐含在包含代码契约的方法中,而不是代码契约本身内部的内容…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |