c# - setter/getter 中的空合并运算符

标签 c#

在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/

相关文章:

c# - 如何正确使用 Physics.autoSimulation?

c# - Directory.GetFiles 不返回文件

c# - 寻找 c# 相当于 php 的 password-verify()

c# - 如何在 HQL 中使用 DATEPART 从 DATETIME 获取 YEAR

c# - 在 .NET 中复制 DebugView 的功能 - 全局 Win32 调试 Hook ?

c# - 我第二次在 HttpPost 中使用 "getResponse()",它只能逐步调试

c# - AppPool 属性上的 AccessDenied 异常,无法调用 ApplPool.Recycle() - C#

c# - 如何查找/呈现预编译的 Razor View

c# - list of list优化构建字典

c# - 在 DataGridView 单元格中显示占位符文本