通过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设置中(在"条件编译符号"文本框中)。
问题是,尽管大多数代码契约都包含在ReSharper ExternalAnnotations中,但确保是不是其中之一(甚至不在任何自定义xml中浮动)。
我刚刚仔细检查了最新ReSharper v8 EAP的ExternalAnnotations,它们仍然和v7.1.3完全一样——所以到目前为止绝对没有任何改变。
我将提出一个新问题,询问是否有人知道如何实现它。
UPDATE: Code Contracts for ReSharper ExternalAnnotations
FINAL:这是不可行的——仅仅因为该属性需要以某种方式隐含在包含代码契约的方法中,而不是代码契约内部的内容…