我有一段看起来像这样的代码:
public TReturn SubRegion(TParam foo)
{
Contract.Requires(foo!= null);
Contract.Ensures(Contract.Result<TReturn>() != null);
if (!CheckStuff(foo))
foo.Blah();
return OtherStuff(foo);
}
Run Code Online (Sandbox Code Playgroud)
CC正在给我一个警告:
警告301 CodeContracts:考虑添加后置条件Contract.Ensures(Contract.Result()!= null); 为库客户提供额外的文档
这显然是多余的!我有几个这样的冗余警告,它正在成为一个问题(真正的警告被埋没在多余的冗余建议中).
所以我有两个问题:
1)我错过了什么意味着这不是一个多余的建议吗?在这种情况下,我需要做些什么来修复此警告?
2)或者,如果这只是CCCheck的一个怪癖并且无法修复,我如何隐藏或抑制此警告?
注:万一你觉得我的例子缺少一些重要的东西,全部代码是区域SubRegion1方法在这里.
关于2:文档相当不错,看看6.6.10过滤警告消息:
要指示静态协定检查器不要针对方法(类型、程序集)发出特定类别的警告,请使用以下属性注释该方法(类型、程序集):
Run Code Online (Sandbox Code Playgroud)[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Contracts", warningFamily)]其中 warningFamily 是以下之一:
Requires, Ensures, Invariant, NonNull, ArrayCreation, ArrayLowerBound, ArrayUpperBound, DivByZero, MinValueNegation.如有必要,静态合同检查器还允许过滤单个警告消息(而不是整个系列)。为此,您可以使用属性注释方法
Run Code Online (Sandbox Code Playgroud)[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Contracts", warningFamily-ILOffset-MethodILOffset)]其中
warningFamily和 如上所述, 和ILOffset被MethodILOffset静态合约检查器用来确定警告所指的程序点。通过在 VS 窗格的“自定义选项”条目中提供 -outputwarnmasks 开关,可以从静态合同检查器获取偏移量。检查构建输出窗口以获取必要的信息。
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |