以下代码为什么返回false?
public static void Main()
{
bool? someCondition = true;
bool someConditionOverride = false;
bool? result = someCondition ?? someConditionOverride ? false : (bool?)null;
Console.WriteLine(result);
}
我本以为结果会是true
,因为someCondition
不是null
,并且??
运算符将返回true
。然而,看起来右操作数先被计算,而左部分被简单地忽略了。
加括号可以解决混淆:
bool? result = someCondition ?? (someConditionOverride ? false : (bool?)null)
结果将是true
。但我仍然好奇为什么第一个示例中左侧部分被忽略了。
??
首先被计算,因此返回false
。就像我不会期望+
优先于-
一样,我也不会期望?:
具有更高的优先级。 - Panagiotis Kanavos