61 lines
2.6 KiB
Markdown
61 lines
2.6 KiB
Markdown
---
|
||
title: Null-conditional Operator
|
||
localeTitle: Нуль-условный оператор
|
||
---
|
||
# Нуль-условный оператор
|
||
|
||
Операторы с нулевым условием допускают нулевую проверку с минимальным количеством кода. Например, если бы у вас было переменная сотрудника типа Employee с свойством типа Address, вы можете выполнить нулевую проверку следующим образом:
|
||
|
||
```csharp
|
||
Address address = null;
|
||
if (employee != null)
|
||
{
|
||
address = employee.Address;
|
||
}
|
||
```
|
||
|
||
Вы можете использовать стандартный условный оператор, чтобы сделать эту проверку более кратким:
|
||
|
||
```csharp
|
||
Address address = employee != null ? employee.Address : null;
|
||
```
|
||
|
||
Однако в C # 6.0 были введены нуль-условные операторы, так что теперь приведенная выше строка может просто представляться следующим образом:
|
||
|
||
```csharp
|
||
Address address = student?.Address;
|
||
```
|
||
|
||
Если employee равен null, адрес просто будет присвоен null, и не будет NullReferenceExeception. Это становится более полезным с более глубокими графами объектов, так как вы можете обрабатывать цепочку условного доступа членов.
|
||
|
||
Например:
|
||
|
||
```csharp
|
||
string city = student?.Address?.City;
|
||
```
|
||
|
||
Операторы с нулевым условием являются короткозамкнутыми, поэтому, как только одна проверка доступа к условному члену возвращает null, остальные не имеют места.
|
||
|
||
# Оператор Null-coalescing
|
||
|
||
Другой полезной опцией нулевой проверки является оператор с нулевым коалесцированием. Он возвращает левый операнд, если операнд не равен нулю; в противном случае он возвращает правый операнд.
|
||
|
||
Например:
|
||
|
||
```csharp
|
||
public string GetStringValue()
|
||
{
|
||
return null;
|
||
}
|
||
|
||
// Display the value of s if s is NOT null. If x IS null, display the string "It was null."
|
||
|
||
string x = GetStringValue();
|
||
|
||
Console.WriteLine(x ?? "It was null.");
|
||
|
||
// Result:
|
||
|
||
"It was null."
|
||
|
||
``` |