在c#中有以下区别吗
//syntax 1
private ICommand newWindowCommand;
public ICommand NewWindowCommand
{
get
{
return newWindowCommand = newWindowCommand ?? new MVVM.RelayCommand(...);
}
}
//syntax 2
private ICommand newWindowCommand;
public ICommand NewWindowCommand
{
get
{
return newWindowCommand ?? new MVVM.RelayCommand(...);
}
}
//syntax 3 the usual way
private ICommand newWindowCommand;
public ICommand NewWindowCommand
{
get
{
if (newWindowCommand==null)
{
newWindowCommand = new MVVM.RelayCommand(...);
}
return newWindowCommand;
}
}
在情况 2 中,它是将 newWindowCommand 设置为已返回的值,还是我必须像在情况 1 中那样分配它?
最佳答案
情况 2 newWindowCommand
未分配。
案例 3 与案例 1 相同,但距离很远。
使用这个:(在我的代码中出现很多)
get {
return newWindowCommand ?? (newWindowCommand = new MVVM.RelayCommand(...));
}
这将首先检查是否分配了 newWindowCommand
。如果没有,它将创建一个新实例,分配并返回它。
它与情况 1(括号)不同,因为 ??
运算符有 higher precedence比 =
.
因此 (
和 )
确保首先执行 =
,然后执行 ??
。
关于c# - setter/getter 中的空合并运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19785451/