C#代码拼图返回一个令人费解的结果

时间:2016-03-24 17:04:02

标签: c#

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?时?

1 个答案:

答案 0 :(得分:10)

第一个陈述显然将x的值设置为null。第二个语句检查x"的值是否为" bool?

is运算符不关心变量的声明的类型。它查看正在评估的对象的实际类型。由于x设置为null,因此传递给is运算符的null,这意味着没有引用对象,因此is bool?返回false

来自MSDN

  

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