相关疑难解决方法(0)

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

有没有办法向ReSharper表明由于按合同设计需要检查,不会出现空引用?例如,以下代码将Possible 'null' assignment to entity marked with 'NotNull' attribute在第7行和第8行的ReSharper中引发warning():

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);
}
Run Code Online (Sandbox Code Playgroud)

真正奇怪的是,如果删除该Contract.Requires(...)行,ReSharper消息就会消失.

更新

我通过ExternalAnnotations找到了解决方案,Mike也在下面提到过.以下是如何在Microsoft.Contracts中为函数执行此操作的示例:

  • 创建一个Microsoft.ContractsExternalAnnotationsReSharper目录下调用的目录.
  • 接下来,创建一个名为的文件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>
Run Code Online (Sandbox Code Playgroud)

  • 重新启动Visual Studio,消息就消失了!

c# resharper design-by-contract code-contracts microsoft-contracts

52
推荐指数
3
解决办法
9640
查看次数

使用Assert语句时,有什么方法可以忽略可能的空引用异常警告吗?

我不想完全禁用警告,就像它在Assert语句中一样.

例如,如果我有以下两行

var someObject = GetObject();
Assert.IsNotNull(someObject, "someObject should not be null");
Assert.AreEqual(expectedValue, someObject.SomeProperty);
Run Code Online (Sandbox Code Playgroud)

我将在第二行上获得可能的空引用警告someObject.SomeProperty.是否可以在某个通话中禁用警告,例如Assert.AreEqual

由于这是很多单元测试的问题,我不想用ReSharper禁用代码乱丢测试.

现在,我能想到的唯一选择就是改变每一个Assert.IsNotNull电话

var someObject = GetObject();
if(someObject == null)
{
  Assert.Fail("someObject is null");
  return;
}
Run Code Online (Sandbox Code Playgroud)

虽然这种似乎打败Assert.IsNotNull了首先拥有的目的.只是想知道是否有更好的方法.

c# mbunit unit-testing resharper-6.1

7
推荐指数
1
解决办法
2276
查看次数

Resharper警告空字符串(System.NullReferenceException)

只是想确定我没有编写太长时间...但是,这似乎不太可能:

string System.NullReferenceExceptionhttp://i.imgur.com/TBjpNTX.png

我创建var,检查null,如果是,则返回,所以我无法在那时看到它为null :)

Resharper bug?

编辑:
根据Igal Tabachnik的回答,他是对的,我正在使用以下方法扩展:

public static bool IsNullOrEmpty(this string target)
{
    return String.IsNullOrEmpty(target);
}
Run Code Online (Sandbox Code Playgroud)

我发现它更容易阅读

if (some_string.IsNullOrEmpty())
  // do something here 
Run Code Online (Sandbox Code Playgroud)

而不是:

if (string.IsNullOrEmpty(some_string))
  // do something here 
Run Code Online (Sandbox Code Playgroud)

解决方案:
Igal Tabachnik是对的.唯一缺少的2件是:

  1. Resharper - >选项 - >代码注释(在代码检查组下) - >打开解决方案.
  2. 给VS几分钟时间来刷新一切.

c# string nullreferenceexception resharper-8.0

7
推荐指数
1
解决办法
704
查看次数