首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ReSharper -使用Microsoft.Contracts时可能的空值分配

ReSharper -使用Microsoft.Contracts时可能的空值分配
EN

Stack Overflow用户
提问于 2009-05-30 14:52:13
回答 6查看 10.2K关注 0票数 52

有没有办法告诉ReSharper,由于契约式设计需要检查,所以不会出现空引用?例如,下面的代码将在ReSharper的第7行和第8行引发警告(Possible 'null' assignment to entity marked with 'NotNull' attribute):

代码语言:javascript
运行
复制
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.
  • Next,下创建一个名为ExternalAnnotations的目录,创建一个名为Microsoft.Contracts.xml的文件,并按如下方式填充:

代码语言:javascript
运行
复制
<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,该消息将消失!
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/929859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档