有没有办法向 ReSharper 表明由于按合同设计需要检查而不会发生空引用?例如,以下代码将Possible 'null' assignment to entity marked with 'NotNull' attribute
在 ReSharper 中的第 7 行和第 8 行引发警告 ( ):
private Dictionary<string, string> _Lookup = new Dictionary<string, string>();
public void Foo(string s)
{
Contract.Requires(!String.IsNullOrEmpty(s));
if (_Lookup.ContainsKey(s))
_Lookup.Remove(s);
}
真正奇怪的是,如果您删除该Contract.Requires(...)
行,ReSharper 消息就会消失。
更新
我通过下面的 Mike 也提到的 ExternalAnnotations 找到了解决方案。下面是如何为 Microsoft.Contracts 中的函数执行此操作的示例:
- 在ReSharper 目录
Microsoft.Contracts
下创建一个名为的目录。ExternalAnnotations
- 接下来,创建一个名为
Microsoft.Contracts.xml
并填充的文件,如下所示:
<assembly name="Microsoft.Contracts">
<member name="M:System.Diagnostics.Contracts.Contract.Requires(System.Boolean)">
<attribute ctor="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor"/>
<parameter name="condition">
<attribute ctor="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)">
<argument>0</argument>
</attribute>
</parameter>
</member>
</assembly>
- 重新启动 Visual Studio,消息消失!