繁体   English   中英

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

[英]C# code puzzle returns a puzzling result

Jon Skeet,如果你正在倾听,这可能是你感兴趣的,因为它与你的代码难题有关... http://codeblog.jonskeet.uk/2014/01/14/a-tale-of-两拼图/

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 “的值是否为” bool?

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

来自MSDN

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM