Resharper可能为空参考警告

Dan*_*ely 3 c# resharper casting

Resharper为此处的as cast提供了可能的空引用警告.它是否有可能实际发生,或者是否在if语句中检查是否排除它?

IMyObjectType someObject = null; //MyObjectType implements IMyObjectType
if (someObject is MyObjectType)
{
    (someObject as MyObjectType).SomePropery = true;
}
Run Code Online (Sandbox Code Playgroud)

And*_*are 8

编辑:哎呀我在这里错了 - 这是正确的答案:

is类型兼容性操作者检查无效所以ReSharper的不应该在该特定情况下发出警告.

证明:

using System;

class Example
{
    static void Main()
    {
        Example example = null;

        // this is always "false"
        Console.WriteLine(example is Example);
    }
}
Run Code Online (Sandbox Code Playgroud)

更多证据:

是(C#参考):

如果提供的表达式为非null, is表达式求值为true ,并且可以将提供的对象强制转换为提供的类型,而不会引发异常.


老答案: 这是不正确的,但为了完整起见,我会把它留在这里.

是的,someObject仍然可以null在这里.

这只检查变量的类型:

someObject is MyObjectType
Run Code Online (Sandbox Code Playgroud)

someObject可能的类型很好,MyObjectType但可能无处可指.换句话说,引用的类型与该引用是否指向对象的实例之间存在差异.