哪一个是更快的null检查使用==操作符或?操作符



我是一名c#开发人员,我正在寻找一点一点的优化

if (tksPesin.prmBilgi != null && tksPesin.prmBilgi.Any())

if (tksPesin.prmBilgi?.Any() ?? false)

我试着改进我的代码,我正在寻找微小的优化。

这两件事不一样;两个非常重要的方面:

  1. != null可能使用也可能不使用自定义操作符;?.始终使用与is not null
  2. 相同的逻辑
  3. 在第一个版本中,您访问tksPesin.prmBilgi两次;我们看不到tksPesin.prmBilgi,所以我们不知道它是否有一个隐藏的http调用,Thread.Sleep,等等

所以:有可以的差异,使?.版本更快。

但是,如果您真的想知道哪个更快:在您的特定场景中测量它们。然而,在现实中,我们永远不会期望?.版本在任何合理的情况下都更慢。

如果您想让第一个版本与?.版本相比较,您可以使用:

var tmp = tksPesin.prmBilgi; // important: access .prmBilgi once only
if (tmp is not null && tmp.Any()) // important: avoid custom != operator
{
// ...
}
但是,并没有给您任何优于?.版本的优势。
if (tksPesin.prmBilgi?.Any() ?? false)

将被编译为:

if (tksPesin.prmBilgi != null && tksPesin.prmBilgi.Any())

所以没有区别。您可以使用https://sharplab.io/查看这些东西是如何编译的。

相关内容

  • 没有找到相关文章

最新更新