使用之间有什么区别??和C#中的if not null块?
在C#?中使用使用之间有什么区别??和C#中的if not null块?,c#,null,nullable,C#,Null,Nullable,在C#?中使用??和如果(foo==null){…}else{…}有什么区别吗??操作符只会计算您的值一次,您的版本可能会多次计算它 所以 应该被评估为 var tmp = foo; if(tmp == null) { tmp = bar; } var baz = tmp; 当foo是在getter中具有副作用的函数或属性时,这一区别非常重要 private int _counter1 = 0; private int _counter2 = 0; private string Ex
??
和如果(foo==null){…}else{…}
有什么区别吗??
操作符只会计算您的值一次,您的版本可能会多次计算它
所以
应该被评估为
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()??示例2()
计数器1的值只应增加一次,而计数器2的值只应每隔一次调用增加一次
//Equivalent if statement
var tmp = Example1();
if(tmp == null)
{
tmp = Example2();
}
var result = tmp;
??
运算符只对您的值进行一次评估,您的版本可能会对其进行多次评估
所以
应该被评估为
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()??示例2()
计数器1的值只应增加一次,而计数器2的值只应每隔一次调用增加一次
//Equivalent if statement
var tmp = Example1();
if(tmp == null)
{
tmp = Example2();
}
var result = tmp;
为了伟大的解释加上一。为了伟大的解释加上一。