何时使用!()或!=如果不为null
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了何时使用!()或!=如果不为null相关的知识,希望对你有一定的参考价值。
虽然重构代码我改变了所有if not null条件,以遵循我的代码中的多数约定
if (!(foo == null))
代替
if (foo != null)
这两种说法都有什么优势吗?
在c#中的任何一个语句中都有任何优势吗?
我发现第二个更具可读性。
除此之外,没有区别。
与团队一起选择约定并在任何特定代码库中坚持使用它更为重要。
假设你没有破坏==
/ !=
运算符重载,我只是使用第二种形式以获得简单/可读性。如果你确实已经破坏了重载,那么两者之间存在语义差异,那么我建议修复那些重载:)
在罕见的情况下,foo == null
更清楚地表明了某些东西,我可能会重构它以使用局部变量:
bool somethingIsMissing = foo == null;
if (!somethingIsMissing)
{
...
}
围绕foo == null
的圆括号现在是可选的 - 根据口味使用或不使用。主要的是你可以使用变量名来使语义清晰。
例如,当您有更多变量要考虑时,通常会使用qazxsw poi
if (!(foo == null))
有时这种方式更容易将所有内容转换为相反的方式,特别是在使用按位运算符时。
第一个使用两个运算符,第二个使用一个。从技术上讲,第二个更简单。
我将使用if (!(f1 == 'a' && f2 != 'b'))
的唯一地方就像这样在!(a == b)
的运算符实现中:
!=
在我看来,没有区别,编译器无论如何都会优化代码。但我更喜欢public static bool operator != (MyType a, MyType b)
{
return !(a == b);
}
。括号少,易于阅读。
我首选的是第二个,因为它比第一个更易读。
他们没有任何区别,所以这只是你的选择。
但是,如果if子句中有许多其他变量,则第一个可能是要使用的变量。
你的选择到底。
因为,第一种形式使用2对1 C#运算符,它可能编译为更多的CIL代码,尽管在大多数用例中大多数会遇到,它可能不会产生显着的代码大小或性能差异。
可能产生显着差异的是可读性,因此在编写/修改时出现错误的可能性。我愿意(而你谢尔顿现在可能想要遮住你的眼睛)避免使用“!”运营商com-PLETELY。 “喘息!我 - 你的话!”是的,我说了。我明白了!充满激情!它很容易被遗漏,因为它通常旁边是一个看起来相似的标点字符(即左边的“(”)和右边的类似标识字母(即“我”)。并且错过它可能会产生严重的后果,因为这意味着你认为代码正在做它实际正在做的事情的确切对立!它也可能更有可能被诵读困难所遗漏,使得它可能成为受ADA保护的残疾人权利问题。
考虑以下非常可能的例子:
if(foo != null)
我会写下面的内容:
if (!IsIisServerConnected)
if (IsOfflineMode || !(IsIisLocalServerConnected || IsIisCloudServerConnected))
或者在你的情况下:
if (false.Equals(IsIisServerConnected))
if
(
IsOfflineMode
|| false.Equals
(
IsIisLocalServerConnected
|| IsIisCloudServerConnected
)
)
请记住,C(C#,C ++,javascript,Java和许多其他当前流行语言最终继承其基本语法的语言)是在Punch Cards仍然常见的时候创建的。使用现代CPU,RAM,显示器和IDE(可以使用自定义键盘快捷键生成“false.Equals(?)”代码段),对于大多数应用程序的大多数人来说,可读性非常多,很多(我提到过“ “?”比保存一些代码字符更重要。
附:您还可以向 if (false.Equals(foo == null))
Struct添加一个扩展方法来调用它,哦,我不知道,Boolean
! ; D所以你可以写:
Not
以上是关于何时使用!()或!=如果不为null的主要内容,如果未能解决你的问题,请参考以下文章
SQL 从 2 列中选择数据,如果它不为 NULL,则插入到视图中
Mongoose:唯一字段,如果它不为 null 或空字符串 [重复]
如何检查 LocationServices.FusedLocationApi.getLastLocation() 何时不为空?