使用和使用有什么区别??以及C#中的if not null块

本文关键字:if not null 中的 以及 什么 区别 | 更新日期: 2023-09-27 18:00:46

在C#中使用??if (foo == null) {...} else {...}有区别吗?

使用和使用有什么区别??以及C#中的if not null块

??运算符只会对您的值求值一次,您的版本可能会对其求值多次。

所以

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;