对于bool?操作数,&(逻辑与)和|(逻辑或)运算符支持三值逻辑,如下所示:
仅当其两个操作数的计算结果都为true时,&运算符才生成true。 如果x或y的计算结果为false,则x & y将生成false(即使另一个操作数的计算结果为null)。 否则,x & y的结果为null。
仅当其两个操作数的计算结果都为false时,|运算符才生成false。 如果x或y的计算结果为true,则x | y将生成true(即使另一个操作数的计算结果为null)。 否则,x | y的结果为null。
下表显示了该语义:
xyx 和yx|y
truetruetruetrue
truefalsefalsetrue
truenullnulltrue
falsetruefalsetrue
falsefalsefalsefalse
falsenullfalsenull
nulltruenulltrue
nullfalsefalsenull
nullnullnullnull
这些运算符的行为不同于值类型可以为 null 的典型运算符行为。 通常情况下,为值类型的操作数定义的运算符也能与值类型可以为 null 的相应操作数一起使用。 如果其任一操作数的计算结果为null,此类运算符都会生成null。 不过,即使操作数之一的计算结果为null,&和|运算符也可以生成非 null。 有关值类型可为空的运算符行为的详细信息,请参阅可为空的值类型一文的提升的运算符部分。
此外,你还可以将!和^运算符与bool?操作数结合使用,如下例所示:
bool? test = null; Display(!test); // output: null Display(test ^ false); // output: null Display(test ^ null); // output: null Display(true ^ null); // output: null void Display(bool? b) => Console.WriteLine(b is null ? "null" : b.Value.ToString());
条件逻辑运算符&&和||不支持bool?操作数。
复合赋