2013-07-01 2 views
-1

Каковы основные использование Null коалесцирующего оператор ??, как показано здесь:Какова цель? оператора в C#?

double? num1 = 3.14157; 
double num2 = num1 ?? 5.34;  
Console.WriteLine("Value of num2: {0}", num2); 
+2

Чтобы разрешить замену значения по умолчанию, когда нулевая переменная имеет значение null или неизвестна. –

+0

Многого не имеет смысла. '' 'не имеет смысла использовать на' double'. – Joey

+0

Можете ли вы объявить две переменные двух разных типов с тем же именем? 'int num1' и' double num1'? –

ответ

7

«Оператор ?? называется оператором нуль-коалесцирующим и используются для определения значения по умолчанию для обнуляемых типов значений или ссылок type. Он возвращает левый операнд, если операнд не равен null, иначе он возвращает правый операнд. "

Источник: MSDN

3

Null Оператор COALESCE позволяет писать код гораздо более лаконично: вместо того, чтобы использовать условный оператор или условное выражение, вы пишете эквивалентное выражение в одной строке.

Сравните свое выражение в этом

if (num1.HasValue) { 
    num2 = num1.Value; 
} else { 
    num2 = 5.34; 
} 

это

num2 = num1.HasValue ? (double)num1.Value : 5.34; 

или это:

num2 = num1 != null ? (double)num1 : 5.34; 

Ваше выражение гораздо легче читать, чем любой из вышеперечисленных.

Кроме того, этот оператор позволяет избежать введения временной переменной или даже сохранить вам вызов функции в ситуациях, когда num1 не в переменной, но происходит от функции вместо:

double num2 = getNum1() ?? 5.34; 

против

int? tmpNum1 = getNum1(); 
num2 = num1.HasValue ? (double)num1.Value : 5.34; 
1

Я обычно использую его для создания объектов в первый раз, когда они запрашиваются:

public ICommand OkCmd 
{ 
    get { return _okCmd ?? (_okCmd = new DelegateCommand(Ok)); } 
} 
private DelegateCommand _okCmd;