Jon Skeet,如果你在听,你可能会感兴趣,因为它与你的代码谜题有关...... http://codeblog.jonskeet.uk/2014/01/14/a-tale-of-two-puzzles/

代码

public class Test
{
    public static void Main()
    {
        bool? x = (true) ? null : default(bool?);
        bool? y = (true) ? x is bool? : default(bool?);

        Console.WriteLine(x);
        Console.WriteLine(y);

        Console.Read();
    }
}

输出



令我困惑的是,我希望看到这个......


bool? y = (true) ? x is bool? : default(bool?);

由于 : default(bool?) 永远不会被命中,为什么 x is bool? 返回 false ,当它是 bool? 时?

最佳答案

第一条语句显然将 x 的值设置为 null 。第二个语句检查 x 的值是否"is" bool?
is 运算符不关心变量的声明类型。它查看正在评估的对象的实际类型。由于 x 设置为 null ,传递给 is 运算符的值为 null ,这意味着没有对象被引用,因此 is bool? 返回 false

来自 MSDN :

关于C# 代码拼图返回令人费解的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36205953/

10-15 06:15