首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >性能差异?和==

性能差异?和==
EN

Stack Overflow用户
提问于 2019-05-18 11:27:05
回答 2查看 183关注 0票数 0

若要使用布尔可空变量查找true或false,我可以使用

代码语言:javascript
复制
bool? nullable;
bool non-nullable;
non-nullable = (nullable == true);

代码语言:javascript
复制
...
non-nullable = (nullable ?? false);

无论哪种情况,结果似乎都是一样的:

代码语言:javascript
复制
    nullable    non-nullable result
    --------    -------------------
    true        true
    false       false
    null        false

如果这些是整数,当然会有区别,但是对于这个布尔示例,我看不出有什么不同。

它们之间有什么性能或功能上的区别吗?

对于这个布尔示例,有理由使用一个而不是另一个吗?

编辑:固定代码- (nullable ?? true)应该是(nullable ?? false)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-18 12:44:41

在您的案例中还有另一个可能的表达式:

代码语言:javascript
复制
non_nullable = nullable.HasValue && nullable.Value;

我不知道这是否会比其他指定的变体慢,因为可空类型上的运算符可能也会在Nullable<T>结构中重载,并且还会涉及方法调用。如果您想确定这一点,就必须进行调查和/或对其进行基准测试。

至于关于性能的整个讨论:我认为,为了将来的维护,最好先将您的代码表示为“自然”。只有在必要时才调查性能改进。正如唐纳德·克努斯( Donald )所说:“过早优化是万恶之源。”

关于使用哪一种表达方式,我的建议是最初使用一个尽可能清晰地表达你意图的表达方式。我个人的选择是:nullable == true

票数 1
EN

Stack Overflow用户

发布于 2019-05-18 11:32:47

== 相等运算符在C#和??是空合并运算符.

来自MSDN站点

== (相等)和!= (不等式)运算符检查它们的操作数是否相等。 那个??运算符称为空合并运算符.如果操作数不是null,则返回左手操作数;否则,返回右手操作数.

代码语言:javascript
复制
non-nullable = (nullable == true);

上面的语句检查条件,如果可空变量包含true,则将true值赋给非空变量,否则赋值为false。

代码语言:javascript
复制
bool? nullable;

在您的示例中,您要创建nullable布尔型变量,这意味着它可以存储bool值或null

代码语言:javascript
复制
non-nullable = (nullable ?? true);

在上面的语句中,如果non-nullablenull,则将nullable设置为的值;否则,将其设置为true(在??之后以常量或默认值形式提供)。

代码语言:javascript
复制
nullable   non-nullable result (nullable ?? true) why?     
--------   ------------------- ------------------------ 
true        true    
false       false
null        false

(可空==为真)为什么?(用其值替换为可空)

  1. true == true,条件满足并返回true。
  2. false == true,条件不满足并返回false,因此non-nullable将为false。
  3. null == true,条件不满足并返回false,因此non-nullable将为false。

(可为空??为什么(可为空??(真)

  1. true?? false,它检查nullable的值,它包含值,即true,然后将该值赋值给左侧操作数。
  2. 与第一点相同
  3. null ?? false,现在nullable变量包含null值,因此它将将false赋值给左侧操作数。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56198497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档