首页 > 解决方案 > 为什么在使用“非”运算符时,“是”运算符的行为会有所不同?

问题描述

我在编程时注意到以下现象:

这个代码片段实际上会编译(令我惊讶)

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);
}

另一方面,这个片段无法编译,就像我尝试过的大多数其他东西一样:

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应该评估,然后才会评估!运营商或==运营商,所以我真的不明白这种差异如何产生影响。

标签: c#roslyn

解决方案


推荐阅读