在c#中,(user==null)和(null==user)之间的差异

在c#中,(user==null)和(null==user)之间的差异,c#,C#,可能的重复项: 我见过很多次人们将null计算为变量,而不是将变量计算为null if(null== user) 而不是 if(user==null) 我知道两者都在努力实现相同的功能。那么,这是某种标准还是纯粹的个人偏好呢。请发表评论。如果(user==null)更容易阅读,则两者都是相等的否,没有区别 使用前者是因为在某些语言中,偶然赋值有时会导致“true”(例如JavaScript) 因此,您更喜欢将常量写在左边,这样它就是一个编译时错误(如果您有,JavaScript显然没有)

可能的重复项:

我见过很多次人们将null计算为变量,而不是将变量计算为null

if(null== user)
而不是

if(user==null)

我知道两者都在努力实现相同的功能。那么,这是某种标准还是纯粹的个人偏好呢。请发表评论。

如果(user==null)更容易阅读,则两者都是相等的

否,没有区别

使用前者是因为在某些语言中,偶然赋值有时会导致“true”(例如JavaScript)


因此,您更喜欢将常量写在左边,这样它就是一个编译时错误(如果您有,JavaScript显然没有),或者充其量是一个运行时错误,而不仅仅是一个bug。

这两个语句之间没有区别,它们是相等的。这与开发人员编写代码的方式有关。

这样做更符合逻辑:

if(user==null)


因为您正在评估的是用户,所以您只需使用null作为比较。

它们实现了相同的效果。就我个人而言,我从来没有在我的任何项目中看到过null==user,但如果我要给出一个猜测,我会说这与您如何阅读日常语言有关。如果你来自欧洲,很可能你是从左到右阅读的,但有些语言是从右到左阅读的,这可能就是它的来源。

我认为
null==user
是C/C++世界中的最佳实践

它可以防止输入错误,例如:

if (user = null) {
因为它们悄无声息地经过,非常危险。在C/C++中使用
null=user
更安全(但在C++中不安全,因为编译器会抱怨),因为编译器无法编译它

它来自C

你可以很容易地写 if(user=null)错误地只使用了一个=符号,而不是比较将null分配给用户,然后测试null的值

如果您以“If(NULL==user)”的形式编写它,那么如果您不小心只编写了一个编译器错误,那么您就会得到一个编译器错误=

我从来都不喜欢它,因为我很少犯这样的错误,如果我犯了,通常会在第一次运行程序时被抓到。但在我看来,这使得代码更难阅读


在c语言中,除了习惯之外没有其他原因。

user==null
是人类的语言

null==user
是尤达说的

对于编译器来说,它们是相同的,所以选择一个您最熟悉的。

据我所知

null==对象将是引用比较。
object==null可能会被重载。

我会使用if(user==null),在读回它时会更有意义。这是一个已经在这里得到了很好回答的重复:这也是一个重复:至少对于从左到右阅读的人来说是这样的。这不就是:(null==user)谎言吗?但是小心点,C编译器不会对此抱怨:
boola;如果(a=true){}
这是一个很好的观点,我只想提到重载。空==对象也可以重载:
公共静态bool操作符==(对象a,人员b)
如果所有重载在左操作数和右操作数中具有相同的类型,那么就说有一个重载
操作符==(用户a,用户b)
,但在左操作数和右操作数具有不同类型的情况下,没有
=
的重载,然后
null==obj
将遇到与
obj==null
相同的重载。这是目前最常见的情况。@Kobi的评论中出现的“异构”重载很少见,而且有点“病态”。如果(=)被用户类重写,则情况就不一样了@JerryNixon MSFT用户定义的重载必须非常糟糕,才能使两者表现出不同的行为。但是我可以编写一个病态的函数,比如
publicstaticoperator==(用户a,用户b){returnobject.ReferenceEquals(b,null);}
。我的运算符只查看其右操作数,而完全忽略左操作数。