为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在C#中经常看到“NULL!=变量”而不是“变量!=NULL”?

为什么在C#中经常看到“NULL!=变量”而不是“变量!=NULL”?

C#
猛跑小猪 2019-10-22 13:12:57
为什么在C#中经常看到“NULL!=变量”而不是“变量!=NULL”?在C#中,对于你陈述条件的顺序,过剩速度有什么不同吗?if (null != variable) ...if (variable != null) ...自从最近,我经常看到第一个,它引起了我的注意,因为我已经习惯了第二个。如果没有区别,第一个有什么好处呢?
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞


在C语言中,如果您使用了一个糟糕的编译器或者没有足够高的警告,这将在没有任何警告的情况下编译(而且确实是法律代码):

// Probably wrongif (x = 5)

你可能是说

if (x == 5)

您可以在C中通过以下操作来解决这个问题:

if (5 == x)

这里的错误将导致无效的代码。

现在,在C#中,这都是一派胡言。除非您正在比较两个布尔值(这是很少见的,IME),否则您可以编写更具可读性的代码,作为“if”语句,首先需要一个布尔表达式,以及x=5“是Int32,不是Boolean.

我建议,如果你在同事的代码中看到了这一点,你就会用现代语言的方式教育他们,并建议他们在将来写出更自然的形式。



查看完整回答
反对 回复 2019-10-23
?
千万里不及你

TA贡献1784条经验 获得超9个赞

有一个很好的理由首先使用NULL:if(null == myDuck)

如果你class Duck覆盖==接线员if(myDuck == null)可以进入无限循环。

使用null首先使用默认的相等比较器,并实际执行您想要的操作。

(我听说你最终习惯了阅读以这种方式编写的代码-我只是还没有经历过这种转换)。

以下是一个例子:

public class myDuck{
    public int quacks;
    static override bool operator ==(myDuck a, myDuck b)
    {
        // these will overflow the stack - because the a==null reenters this function from the top again
        if (a == null && b == null)
            return true;
        if (a == null || b == null)
            return false;

        // these wont loop
        if (null == a && null == b)
            return true;
        if (null == a || null == b)
            return false;
        return a.quacks == b.quacks; // this goes to the integer comparison
    }}



查看完整回答
反对 回复 2019-10-23
?
慕勒3428872

TA贡献1848条经验 获得超5个赞

我想这是一个转换语言的C程序员。

在C语言中,您可以编写以下内容:

int i = 0;if (i = 1){
    ...}

注意,这里使用了一个等号,这意味着代码将把1赋值给变量i,然后返回1(赋值是表达式),在if-语句中使用1,这将作为true处理。换句话说,上面的是一个bug。

然而,在C#中,这是不可能的。事实上,两者并无分别。



查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 356 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信