我是一名c#开发人员,我正在寻找一点一点的优化
if (tksPesin.prmBilgi != null && tksPesin.prmBilgi.Any())
或
if (tksPesin.prmBilgi?.Any() ?? false)
我试着改进我的代码,我正在寻找微小的优化。
这两件事不一样;两个非常重要的方面:
!= null
可能使用也可能不使用自定义操作符;?.
始终使用与is not null
相同的逻辑- 在第一个版本中,您访问
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/查看这些东西是如何编译的。