若要使用布尔可空变量查找true或false,我可以使用
bool? nullable;
bool non-nullable;
non-nullable = (nullable == true);或
...
non-nullable = (nullable ?? false);无论哪种情况,结果似乎都是一样的:
nullable non-nullable result
-------- -------------------
true true
false false
null false如果这些是整数,当然会有区别,但是对于这个布尔示例,我看不出有什么不同。
它们之间有什么性能或功能上的区别吗?
对于这个布尔示例,有理由使用一个而不是另一个吗?
编辑:固定代码- (nullable ?? true)应该是(nullable ?? false)
发布于 2019-05-18 12:44:41
在您的案例中还有另一个可能的表达式:
non_nullable = nullable.HasValue && nullable.Value;我不知道这是否会比其他指定的变体慢,因为可空类型上的运算符可能也会在Nullable<T>结构中重载,并且还会涉及方法调用。如果您想确定这一点,就必须进行调查和/或对其进行基准测试。
至于关于性能的整个讨论:我认为,为了将来的维护,最好先将您的代码表示为“自然”。只有在必要时才调查性能改进。正如唐纳德·克努斯( Donald )所说:“过早优化是万恶之源。”
关于使用哪一种表达方式,我的建议是最初使用一个尽可能清晰地表达你意图的表达方式。我个人的选择是:nullable == true。
发布于 2019-05-18 11:32:47
== 相等运算符在C#和??是空合并运算符.
来自MSDN站点
== (相等)和!= (不等式)运算符检查它们的操作数是否相等。 那个??运算符称为空合并运算符.如果操作数不是null,则返回左手操作数;否则,返回右手操作数.
non-nullable = (nullable == true);上面的语句检查条件,如果可空变量包含true,则将true值赋给非空变量,否则赋值为false。
bool? nullable;在您的示例中,您要创建nullable布尔型变量,这意味着它可以存储bool值或null。
non-nullable = (nullable ?? true);在上面的语句中,如果non-nullable是null,则将nullable设置为的值;否则,将其设置为true(在??之后以常量或默认值形式提供)。
nullable non-nullable result (nullable ?? true) why?
-------- ------------------- ------------------------
true true
false false
null false(可空==为真)为什么?(用其值替换为可空)
true == true,条件满足并返回true。false == true,条件不满足并返回false,因此non-nullable将为false。null == true,条件不满足并返回false,因此non-nullable将为false。(可为空??为什么(可为空??(真)
true?? false,它检查nullable的值,它包含值,即true,然后将该值赋值给左侧操作数。null ?? false,现在nullable变量包含null值,因此它将将false赋值给左侧操作数。https://stackoverflow.com/questions/56198497
复制相似问题