什么是 ”?? “c#中的运算符?

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

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

public NameValueCollection Metadata { get { return metadata ?? (metadata = new NameValueCollection()); } } 

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

 b = a ?? 1; 

等于

 b = (a != null ? (int)a : 1); 

等于

 if(a != null) b = (int)a; else b = 1; 

因此

 public NameValueCollection Metadata { get { return metadata ?? (metadata = new NameValueCollection()); } } 

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

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

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

?? 运算符(C#参考)

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

您的示例可以重写为:

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

来自MSDN: http : //msdn.microsoft.com/en-us/library/ms173224.aspx

可空类型可以包含值,也可以是未定义的。 ?? ?? 运算符定义将可空类型分配给非可空类型时要返回的默认值。 如果您尝试将可空值类型分配给不可为空的值类型而不使用?? 运算符,您将生成编译时错误。 如果使用强制转换,并且当前未定义可空值类型,则将抛出InvalidOperationExceptionexception。

  class NullCoalesce { static int? GetNullableInt() { return null; } static string GetStringValue() { return null; } static void Main() { // ?? operator example. int? x = null; // y = x, unless x is null, in which case y = -1. int y = x ?? -1; // Assign i to return value of method, unless // return value is null, in which case assign // default value of int to i. int i = GetNullableInt() ?? default(int); string s = GetStringValue(); // ?? also works with reference types. // Display contents of s, unless s is null, // in which case display "Unspecified". Console.WriteLine(s ?? "Unspecified"); } 

}

这用于在NULL变量的情况下替换默认值。

 X = (if Y is not null return Y) ?? (else return DEFAULT) 

阅读有关C#的有用之处的详细讨论。 运营商?

这是coalesce运算符,它检查null。

statement ?? fallback 如果语句的计算结果为null ,则使用fallback 。 见msdn 。

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

http://msdn.microsoft.com/en-us/library/ms173224.aspx

?? 是空合并运算符

在这里阅读: 链接文本