<! - ?? - >符号在C#.NET中意味着什么?

时间:2010-02-18 16:02:13

标签: c# .net symbols

  

可能重复:
  What is the “??” operator for?

我看到了一行代码 -

return (str ?? string.Empty).Replace(txtFind.Text, txtReplace.Text);

我想知道这一行的确切含义(即??部分)..

5 个答案:

答案 0 :(得分:19)

它是null coalescing operator:如果它是非null,则返回第一个参数,否则返回第二个参数。在您的示例中,str ?? string.Empty实际上用于为空字符串交换空字符串。

它对可空类型特别有用,因为它允许指定默认值:

int? nullableInt = GetNullableInt();
int normalInt = nullableInt ?? 0;

编辑: str ?? string.Empty可以根据条件运算符重写为str != null ? str : string.Empty。如果没有条件运算符,则必须使用更详细的if语句,例如:

if (str == null)
{
    str = string.Empty;
}

return str.Replace(txtFind.Text, txtReplace.Text);

答案 1 :(得分:9)

它被称为null coalescing operator。它允许您有条件地从链中选择第一个非空值:

string name = null;
string nickname = GetNickname(); // might return null
string result = name ?? nickname ?? "<default>";

result中的值如果不为空,则为nickname的值,或"<default>"

答案 2 :(得分:4)

它相当于

(str == null ? string.Empty : str)

答案 3 :(得分:3)

??运算符说返回非空值。所以,如果您有以下代码:

string firstName = null; 

string personName = firstName ?? "John Doe"; 

上面的代码将返回“John Doe”,因为firstName值为null。

就是这样!

答案 4 :(得分:1)

str ?? String.Empty

可以写成:

if (str == null) {
    return String.Empty;
} else {
    return str;
}

或作为三元声明:

str == null ? str : String.Empty;