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." 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```
							 |