有没有办法告诉ReSharper,由于契约式设计需要检查,所以不会出现空引用?例如,下面的代码将在ReSharper的第7行和第8行引发警告(Possible 'null' assignment to entity marked with 'NotNull' attribute
):
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消息就会消失。
更新
我通过ExternalAnnotations找到了解决方案,下面迈克也提到了这一点。下面是一个如何在Microsoft.Contracts中对函数执行此操作的示例:
ExternalAnnotations
ReSharper directory.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>
https://stackoverflow.com/questions/929859
复制相似问题