什么是c#中的"??"运算符?

Emi*_*ily 18 c#

可能重复:
什么是"??"运算符?

什么是"??" 运算符在表达式中执行?

public NameValueCollection Metadata
{
    get { return metadata ?? (metadata = new NameValueCollection()); }
}
Run Code Online (Sandbox Code Playgroud)

Ham*_*ari 29

这称为null-coalescing运算符,它的作用如下,假设a是一个可以为null的int并且b是一个普通的int

b = a ?? 1;
Run Code Online (Sandbox Code Playgroud)

等于

b = (a != null ? (int)a : 1);
Run Code Online (Sandbox Code Playgroud)

等于

if(a != null)
    b = (int)a;
else
    b = 1;
Run Code Online (Sandbox Code Playgroud)

因此

public NameValueCollection Metadata
{
    get { return metadata ?? (metadata = new NameValueCollection()); }
}
Run Code Online (Sandbox Code Playgroud)

扩展应该看起来像这样的东西

public NameValueCollection Metadata
{
    get
    {
        if(metadata == null)
            return (metadata = new NameValueCollection());
        else
            return metadata;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一种单线程单例模式,因为getter每次请求时都返回元数据(一个初始化的NameValueCollection对象),期望第一次它在那时为空,所以它初始化它然后返回它.这是偏离主题但请注意,这种单例模式的方法不是线程安全的.


Met*_*urf 5

?? 运算符(C#参考)

?? ?? operator被称为null-coalescing运算符,用于为可空值类型和引用类型定义默认值.如果它不为null,则返回左侧操作数; 否则返回正确的操作数.

您的示例可以重写为:

public NameValueCollection Metadata
  {
    get { 
          if (metadata == null)
              metadata = new NameValueCollection();

          return metadata;
         }
  }
Run Code Online (Sandbox Code Playgroud)