条件语句的区别请问下面两个语句有区别吗?如果(null!=obj)或if(obj!=null)两者处理相同,哪个更好?这里的区别在于生成的代码。这两个代码不会产生完全相同的代码,但这实际上与两个语句的结果或性能无关。但是,如果您创建自己的类型,覆盖不等式运算符,并且做得很糟糕,那么它就很重要了。考虑:publicclassTestClass{...publicstaticbooloperator!=(TestClassleft,TestClassright){return!left.Equals(right);在这种情况下,如果运算符的第一个参数为空,即。如果(null!=obj),那么它将因NullReferenceException而崩溃。总结一下:现在,我认为你问的原因是因为你看过C中的代码,通常有这样的代码:if(null==obj)请注意,我在这里切换到相等性检查。原因是用旧的C编译器编写的程序中的一个常见错误(最近他们往往会发现这个问题)将切换它并忘记其中一个相同的字符,即。This:if(obj=null)这将分配变量null而不是比较它。当时解决此错误的最佳方法是切换它,因为您不能将任何内容分配给null,它不是变量。现在。这不会编译:if(null=obj)第一个是Yoda条件。你不应该使用它。不,但是第二种方式更常见且更易读(我认为更合乎逻辑)不,没有。完全一样。样式null==obj有时仅用于防止常见错误obj=null不会意外地将null分配给变量,但绝对没有理由使用!=这样做。在.NET中,它实际上不会针对拼写错误obj=null进行编译。所以编译器会防止你不小心这样做。Yoda条件最初来自其他缺少此编译器功能的语言。它们完全一样。有些人更喜欢null作为表达式的第一部分,以避免像if(obj=null)//shouldbeobj==null这样的错误,但这当然不适用于!=运算符,所以在你的例子中,它只是风格上的差异。第一种形式if(blah==obj)的使用源于编译器无法捕获if(obj=blah)的日子,即无意赋值,除非在警告级别设置为最大的情况下进行编译第一种形式的语句来自C/C++,其中可以不将布尔值传递给条件验证。例如,除0以外的任何值都为真,零为假:if(5){}//trueif(0){}//false如果您忘记输入“=”字符,这有时会产生问题:if(x=5){}//这总是正确的并且改变了x值if(x==5){}//这是正确的,如果x等于5所以使用Yoda语法以便当a'='接收编译器错误:if(5=x){}//这会为心不在焉的程序员生成编译器错误if(5==x){}//这是真的,如果x等于5C#只允许booleanvaluesinconditions,soif(x=5){}//这不会编译if(x==5){}//这是真的,如果x等于5Booleantype怎么样?if(y=true){}if(y==true){}嗯,这是无用的代码,因为你可以写if(y)。结论:Yoda语法不再使用C/C++,你不需要再使用它了。以上就是《C#学习教程:条件语句的区别》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
