C# “可空布尔逻辑”;及;运算符对true和false的行为不同

C# “可空布尔逻辑”;及;运算符对true和false的行为不同,c#,nullable,logical-operators,C#,Nullable,Logical Operators,使用bool?变量,有人能解释为什么true&null导致null和false&null导致false void Main() { bool? a = null; bool? b = true; bool? c = a & b; Console.WriteLine($"{b} & NULL => " + c); b = false; c = a & b; Console.WriteLine($"{b

使用
bool?
变量,有人能解释为什么
true&null
导致
null
false&null
导致
false

void Main()
{    
    bool? a = null;
    bool? b = true;
    bool? c = a & b;

    Console.WriteLine($"{b} & NULL => " + c);

    b = false;
    c = a & b;
    Console.WriteLine($"{b} & NULL => " + c);
}
输出:

True&NULL=>
False&NULL=>False


我也会很高兴看到这个副本,因为我还没有找到它。

在这种情况下(a&b),编译器只是在find 1 false时返回false,否则比较a和b,在他的情况下不能返回真正的结果,然后什么也不返回

在这种情况下(a&b),编译器只在find 1 false时返回false,否则比较a和b,在他的情况下不能返回真实结果,然后什么也不返回

使用可空类型意味着布尔值实际上可以有3个值,
true
false
null
。这就意味着你必须要对这件事有所了解


(用于sql问题)涵盖了使用三值逻辑时
的结果。

使用可空类型意味着布尔值实际上可以有3个值,
true
false
null
。这就意味着你必须要对这件事有所了解


(用于sql问题)涵盖了使用三值逻辑时
的结果。

答案是bool?类型被设计为匹配SQL布尔值,如下所述 并引述如下

乡下佬?类型

乡下佬?可为null的类型可以包含三个不同的值:true, false和null。乡下佬?类型类似于 在SQL中使用。确保由和产生的结果| 运算符与SQL中的三值布尔类型一致, 提供以下预定义运算符:•布尔?操作人员 &(bool?x,bool?y)•bool?运算符|(布尔?x,布尔?y)

这些运算符的语义由下表定义:

x y x&y x | y

正确的
真假假假真
真空真空
假-真-假-真
假假假假
假空假空
空-真空-真空
null false false null
零零零零零零零

请注意,这两个运算符不遵循中描述的规则 操作员部分:操作员评估的结果可以是 即使其中一个操作数为null,也不为null


答案是,布尔?类型被设计为匹配SQL布尔值,如下所述 并引述如下

乡下佬?类型

乡下佬?可为null的类型可以包含三个不同的值:true, false和null。乡下佬?类型类似于 在SQL中使用。确保由和产生的结果| 运算符与SQL中的三值布尔类型一致, 提供以下预定义运算符:•布尔?操作人员 &(bool?x,bool?y)•bool?运算符|(布尔?x,布尔?y)

这些运算符的语义由下表定义:

x y x&y x | y

正确的
真假假假真
真空真空
假-真-假-真
假假假假
假空假空
空-真空-真空
null false false null
零零零零零零零

请注意,这两个运算符不遵循中描述的规则 操作员部分:操作员评估的结果可以是 即使其中一个操作数为null,也不为null


在这种情况下,
null
的目的是标识未知值。在三值逻辑中,
unknown
值的目的是表示我们对谓词的真假一无所知

false和unknown
返回
false
,因为知道第二个运算符是什么并不重要。这是因为and运算符的性质要求两个操作数都为
true
才能返回
true
。我们知道,第一个操作数是
false
,其余的操作数是无关的,结果是
false

另一方面,
true和unknown
返回
unknown
,因为第一个操作数是
true
,因此整个操作的结果取决于第二个操作数。第二个操作数为
未知
,因此结果为
未知


C#表示
unknown
null
在这种情况下
null
的目的是标识未知值。在三值逻辑中,
unknown
值的目的是表示我们对谓词的真假一无所知

false和unknown
返回
false
,因为知道第二个运算符是什么并不重要。这是因为and运算符的性质要求两个操作数都为
true
才能返回
true
。我们知道,第一个操作数是
false
,其余的操作数是无关的,结果是
false

另一方面,
true和unknown
返回
unknown
,因为第一个操作数是
true
,因此整个操作的结果取决于第二个操作数。第二个操作数为
未知
,因此结果为
未知


C#表示
unknown
null

猜测:False和whatever不可能为true,但true&whatever可以为true或False。但这只是一个猜测。这不是一个按位和。。。你不是在做手术integers@Adrian谢谢,“这不是按位的”我不知道如何指定它只有一个
&
。那么怎么称呼它呢?@MongZhu在C#中我们称之为
&
逻辑AND和
&
条件逻辑AND。请注意,这仅适用于
bool
<代码>&
确实是按位的,当应用于