为什么'is'运算符在使用'not'运算符时表现不同?

时间:2018-05-17 14:24:51

标签: c# roslyn

我在编程时注意到了以下的phenonema:

This code片段实际上会编译(令我惊讶)

public static void Main()
{
    object obj = "some string";
    if (!(obj is string str))
    {
        Console.WriteLine("Hmm... we just broke space and time");
        return;
    }
    Console.WriteLine(str);
}
另一方面,

This snippet无法编译,就像我尝试的其他大多数东西一样:

public static void Main()
{
    object obj = "some string";
    if (obj is string str == false)
    {
        Console.WriteLine("Hmm... we just broke space and time");
        return;
    }
    //CS0165: Use of unassigned local variable 'str'
    Console.WriteLine(str);
}

我的问题:
为什么第一个代码片段编译但第二个代码片段不编译?首先应该对我的理解obj is string str进行评估,然后才会对!运算符或==运算符进行评估,因此我真的不知道这种差异如何产生影响

0 个答案:

没有答案