61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Null-conditional Operator
							 | 
						|||
| 
								 | 
							
								localeTitle: 空条件运算符
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								# 空条件运算符
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								空条件运算符允许使用最少量的代码进行空检查。例如,如果你有 一个Employee类型的employee变量,其属性类型为Address,您可以执行null检查,如下所示:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```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运算符。如果操作数不为null,则返回左侧操作数;否则它返回右手操作数。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								例如:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```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." 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```
							 |