我看到了一行代码 -
return (str ?? string.Empty).Replace(txtFind.Text, txtReplace.Text);
我想知道这一行的确切含义(即??
部分)..
答案 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;