Что делает <??> символ, средний в C#.NET? [дубликат]

Возможный дубликат:
Что “??” оператор для?

Я видел строку кода, которая указывает -

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

Я хочу знать точное значение этой строки (т.е. ?? часть)..

8
задан Community 23 May 2017 в 02:25
поделиться

5 ответов

Это оператор объединения с нулевым значением : он возвращает первый аргумент, если он не равен нулю, и второй аргумент в противном случае. В вашем примере 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);
19
ответ дан 3 November 2019 в 12:49
поделиться
str ?? String.Empty

можно записать как:

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

или как тернарный оператор:

str == null ? str : String.Empty;
1
ответ дан 3 November 2019 в 12:49
поделиться

Это называется null coalescing operator. Он позволяет условно выбрать первое ненулевое значение из цепочки:

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

Значением в result будет либо значение nickname, если оно не null, либо "".

9
ответ дан 3 November 2019 в 12:49
поделиться

?? оператор говорит, что вернет мне ненулевое значение. Итак, если у вас есть следующий код:

string firstName = null; 

string personName = firstName ?? "John Doe"; 

Приведенный выше код вернет «John Doe», поскольку значение firstName равно нулю.

Вот и все!

3
ответ дан 3 November 2019 в 12:49
поделиться

это эквивалент

(str == null ? string.Empty : str)
4
ответ дан 3 November 2019 в 12:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: