使用和使用有什么区别??以及C#中的if not null块
本文关键字:if not null 中的 以及 什么 区别 | 更新日期: 2023-09-27 18:00:46
在C#中使用??
和if (foo == null) {...} else {...}
有区别吗?
??
运算符只会对您的值求值一次,您的版本可能会对其求值多次。
所以
var baz = foo ?? bar;
应评估为
var tmp = foo;
if(tmp == null)
{
tmp = bar;
}
var baz = tmp;
当foo
是一个在getter中具有副作用的函数或属性时,这种差异是重要的。
private int _counter1 = 0;
private int _counter2 = 0;
private string Example1()
{
_counter1++;
if(_counter1 % 2 == 0)
return _counter1.ToString();
else
return null;
}
private string Example2()
{
_counter2++;
return _counter2.ToString();
}
每次执行var result = Example1() ?? Example2()
时,_counter1
的值应该只上升一次,而_counter2
的值应该每隔一次调用就上升一次。
//Equivalent if statement
var tmp = Example1();
if(tmp == null)
{
tmp = Example2();
}
var result = tmp;