2016-05-03 9 views
-4

Я читаю код приложения WPF и прошли через эту строку кода:В чем смысл этой строки кода?

string variableName = " " + ViewModelName.?ObjectName.?DifferentObject.?StringVariable ?? ""; 

разбив его:

string variableName = " " + ViewModelName. 
           ?ObjectName. 
           ?DifferentObject. 
           ?StringVariable 
          ?? 
           ""; 

Я никогда не видел .? или ??, и я предполагаю, что это выбор между пустую строку и некоторую другую строку, но на основе некоторых условий. Каковы эти условия? ноль? и почему двойной ?? вместо одного ? в конце? (что-то вроде variable = bool ? ifTrue : ifFalse)

С этой точки зрения, похоже, что это спасло много места, и мне интересно узнать об этом. Разрешено ли в C++?

Каковы ключевые слова этих вещей или поля, чтобы я мог его исследовать? Пожалуйста, спасибо

+2

Какой язык? C++ и C# не совпадают. – NathanOliver

+0

@nathan, потому что я хотел знать, разрешено ли ему на C++.Я удалю его, спасибо –

+0

@jeremy, который получил от меня ответ спасибо и оказался называться _null условным operator_ –

ответ

1

1) var x = y ?? z эквивалентно:

var x = y != null ? y : z; 

2) var x = y?.z; эквивалентно:

var x = y != null ? y.z : null; 
1

Это Null-Conditional Operator, представленный в C# 6.0.

Выражение A? .B оценивает значение B, если левый операнд (A) не равен нулю; в противном случае он оценивается как null.

Используется для проверки нуля перед выполнением доступа к членству (?.) Или индексирования (? [). Эти операторы помогают вам писать меньше кода для обработки нулевых проверок.

+0

Спасибо, я получил его сейчас, и у меня была опечатка? **** –

1

?. Является ли функция C# 6, называемая нулевым условным (иначе говоря, распространением).

a?.b?.c представляет собой сокращенный:

if (a != null) { 
    if (a.b != null) { 
     return a.b.c 
    } 
    else 
     return null; 
} 
else 
    return null; 

?? был вокруг навсегда. Его называют null-coalescing operator a??b представляет собой сокращенную:

a != null ? a : b

Так что ваш код:

string variableName = " " + ViewModelName?. 
           ObjectName?. 
           DifferentObject?. 
           StringVariable 
          ?? 
           ""; 

Может иметь нулевой оператор коалесцирующий в конце удалены. Потому что, если последнее свойство StringVariable равно нулю:

" " + null 

будет равна: " "

Вы можете иметь его:

string variableName = " " + ViewModelName?. 
            ObjectName?. 
            DifferentObject?. 
            StringVariable 
+0

Исправление для первой строки: 'if (a! = Null) return a.b; else return null; ' –

Смежные вопросы