提问人:Abolfazl Pourmohammad 提问时间:4/12/2023 更新时间:4/12/2023 访问量:89
使用 ==operator 或 ?,哪一个更快。操作员 [已关闭]
Which one is faster null check using ==operator or ?. operator [closed]
问:
我是一名 C# 开发人员,我正在一点一点地寻找优化
if (tksPesin.prmBilgi != null && tksPesin.prmBilgi.Any())
或
if (tksPesin.prmBilgi?.Any() ?? false)
我尝试改进我的代码,我正在寻找微小的优化。
答:
-2赞
Radu Hatos
4/12/2023
#1
if (tksPesin.prmBilgi?.Any() ?? false)
将被编译为:
if (tksPesin.prmBilgi != null && tksPesin.prmBilgi.Any())
所以没有区别。您可以使用 https://sharplab.io/ 来查看这些内容是如何编译的。
评论
3赞
Marc Gravell
4/12/2023
看,这不是真的;它将被编译成更像的东西 - 这些差异可能很重要var tmp = tksPesin.prmBilgi; if (tmp is not null && tmp.Any())
0赞
MakePeaceGreatAgain
4/12/2023
正如 Marc 所提到的,猫王操作员是短周期的。
3赞
Marc Gravell
4/12/2023
#2
这两件事是不一样的;在两个非常重要的方面:
!= null
可能使用也可能不使用自定义运算符; 始终使用与?.
is not null
- 在第一个版本中,您可以访问两次;我们看不到,所以我们不知道它是否有隐藏的 http 调用等
tksPesin.prmBilgi
tksPesin.prmBilgi
Thread.Sleep
所以:可能会有差异,使版本更快。?.
但是,如果您真的想知道哪个更快:在您的特定场景中衡量它们。但实际上,我们绝不会期望版本在任何合理情况下会变慢。?.
如果要使第一个版本与该版本相媲美,则可以使用:?.
var tmp = tksPesin.prmBilgi; // important: access .prmBilgi once only
if (tmp is not null && tmp.Any()) // important: avoid custom != operator
{
// ...
}
但是,与版本相比,这并不能给您带来任何优势。?.
评论