ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# ?? 运算符(C# 参考) **??** 运算符称作 null 合并运算符。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。 ## 备注 可以为 null 的类型可以表示类型的域中的值,或者值可以是未定义的(在这种情况下,值为 null)。当左操作数具有一个值为 null 的可以为 null 的类型时,可以使用 **??** 运算符的语法表现力来返回适当的值(右操作数)。如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 **??** 运算符,则会生成编译时错误。如果使用强制转换,且当前未定义可以为 null 值的类型,则会引发 **InvalidOperationException** 异常。 有关详细信息,请参阅[可以为 null 的类型(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/1t3y8s4s.aspx)。 即使 ?? 运算符的两个参数都是常量,也不能将其结果视为常量。 ``` class NullCoalesce { static int? GetNullableInt() { return null; } static string GetStringValue() { return null; } static void Main() { int? x = null; // Set y to the value of x if x is NOT null; otherwise, // if x = null, set y to -1. int y = x ?? -1; // Assign i to return value of the method if the method's result // is NOT null; otherwise, if the result is null, set i to the // default value of int. int i = GetNullableInt() ?? default(int); string s = GetStringValue(); // Display the value of s if s is NOT null; otherwise, // display the string "Unspecified". Console.WriteLine(s ?? "Unspecified"); } } ``` ## 请参阅 [C# 参考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [C# 运算符](https://msdn.microsoft.com/zh-CN/library/6a71f45d.aspx) [可以为 null 的类型(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/1t3y8s4s.aspx) [“提升”的准确含义是什么?](http://go.microsoft.com/fwlink/?LinkID=112382)