我正在使用代码合同来声明一个属性返回一个非空的、非空序列的字符串,如下所示:
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文件,除了我尝试应用上面链接的答案中的修复方法之外。)
进一步的信息:
我正在尝试在带有.NET 4.0和.NET 4.5的Visual Studio 2012 Update 2中完成此操作。
另外,您需要将条件编译符号“CONTRACTS_FULL”添加到项目的生成设置中(在“条件编译符号”文本框中)。
Contracts.Ensures
(但是Contracts.Requires
是被尊重的)。顺便说一下,我在最新的ReSharper v8 EAP中检查了ExternalAnnotations,它们仍然是一样的... - Nikola Bogdanović