代码
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?
时?
答案 0 :(得分:10)
第一个陈述显然将x
的值设置为null
。第二个语句检查x
"的值是否为" bool?
。
is
运算符不关心变量的声明的类型。它查看正在评估的对象的实际类型。由于x
设置为null
,因此传递给is
运算符的值为null
,这意味着没有引用对象,因此is bool?
返回false
。
来自MSDN:
如果提供的表达式为非null ,则
is
表达式的计算结果为true ,并且可以将提供的对象强制转换为提供的类型,而不会引发异常。