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
<代码>&
确实是按位的,当应用于