可能是重复问题:
什么是“??”运算符?
我看到了一行代码,其中写着 -
return (str ?? string.Empty).Replace(txtFind.Text, txtReplace.Text);
我想知道这行代码的确切含义(即 ??
部分)。
可能是重复问题:
什么是“??”运算符?
我看到了一行代码,其中写着 -
return (str ?? string.Empty).Replace(txtFind.Text, txtReplace.Text);
我想知道这行代码的确切含义(即 ??
部分)。
这是空值合并运算符:如果第一个参数非空则返回它,否则返回第二个参数。在你的例子中,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);
str ?? string.Empty
的语法吗?我的意思是用详细的语法替换这行代码。 :) - Bibhas Debnath它被称为 空值合并运算符。它允许您有条件地从链中选择第一个非 null 值:
string name = null;
string nickname = GetNickname(); // might return null
string result = name ?? nickname ?? "<default>";
result
中的值将是nickname
的值(如果不为null),否则为"<default>"
。??运算符表示返回非空值。因此,如果您有以下代码:
string firstName = null;
string personName = firstName ?? "John Doe";
这是相当于的意思。
(str == null ? string.Empty : str)
str
,它会变得更加复杂 - 因为该表达式只会被评估一次。 - Jon Skeetstr ?? String.Empty
可以写成:
if (str == null) {
return String.Empty;
} else {
return str;
}
或者作为三元语句:
str == null ? str : String.Empty;
str
表达式只使用??
运算符评估一次。 - Broam