Возможный дубликат:
Что “??” оператор для?Я видел строку кода, которая указывает -
return (str ?? string.Empty).Replace(txtFind.Text, txtReplace.Text);
Я хочу знать точное значение этой строки (т.е.
??
часть)..
Это оператор объединения с нулевым значением : он возвращает первый аргумент, если он не равен нулю, и второй аргумент в противном случае. В вашем примере str ?? string.Empty
по существу используется для замены пустых строк на пустые.
Это особенно полезно для типов, допускающих значение NULL, поскольку позволяет указать значение по умолчанию:
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
можно записать как:
if (str == null) {
return String.Empty;
} else {
return str;
}
или как тернарный оператор:
str == null ? str : String.Empty;
Это называется null coalescing operator. Он позволяет условно выбрать первое ненулевое значение из цепочки:
string name = null;
string nickname = GetNickname(); // might return null
string result = name ?? nickname ?? "<default>";
Значением в result
будет либо значение nickname
, если оно не null, либо "
.
?? оператор говорит, что вернет мне ненулевое значение. Итак, если у вас есть следующий код:
string firstName = null;
string personName = firstName ?? "John Doe";
Приведенный выше код вернет «John Doe», поскольку значение firstName равно нулю.
Вот и все!