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