可能重复:
什么是"??"运算符?
什么是"??" 运算符在表达式中执行?
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对象),期望第一次它在那时为空,所以它初始化它然后返回它.这是偏离主题但请注意,这种单例模式的方法不是线程安全的.
?? ?? operator被称为null-coalescing运算符,用于为可空值类型和引用类型定义默认值.如果它不为null,则返回左侧操作数; 否则返回正确的操作数.
您的示例可以重写为:
public NameValueCollection Metadata
{
get {
if (metadata == null)
metadata = new NameValueCollection();
return metadata;
}
}
Run Code Online (Sandbox Code Playgroud)