66 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Exceptions
							 | 
						|||
| 
								 | 
							
								localeTitle: 例外
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								# 例外
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								例外是程序运行时发生的意外错误,例如尝试访问不存在的文件。如果不处理,它将停止程序。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 例
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								如果我们尝试读取不存在的文件的文本:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								using System.IO; 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 string content = File.ReadAllText(@"C:\DoesNotExist.txt"); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								将引发`FileNotFoundException` 。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								其他一些常见例外:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   `IndexOutofRangeException` :尝试访问具有无效索引的数组。
							 | 
						|||
| 
								 | 
							
								*   `NullReferenceException` :尝试使用未分配的引用变量。
							 | 
						|||
| 
								 | 
							
								*   `DivideByZeroException` :尝试除以0。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 最佳实践
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 使用try / catch / finally块
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								try 
							 | 
						|||
| 
								 | 
							
								 { 
							 | 
						|||
| 
								 | 
							
								   var client = new WebClient(); 
							 | 
						|||
| 
								 | 
							
								   var resultData = client.DownloadString("http://github.com"); 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								 catch (Exception ex) 
							 | 
						|||
| 
								 | 
							
								 { 
							 | 
						|||
| 
								 | 
							
								   //code for handling exceptions 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								 finally 
							 | 
						|||
| 
								 | 
							
								 { 
							 | 
						|||
| 
								 | 
							
								   //this code is always executed, does not matter if an exception is thrown or not 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 处理条件可能存在的例外情况
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								代替
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								try 
							 | 
						|||
| 
								 | 
							
								 { 
							 | 
						|||
| 
								 | 
							
								   conn.Close(); 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								 catch (Exception ex) 
							 | 
						|||
| 
								 | 
							
								 { 
							 | 
						|||
| 
								 | 
							
								   //code for handling exceptions. 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								试试这个
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								if (conn.State != ConnectionState.Closed) 
							 | 
						|||
| 
								 | 
							
								 { 
							 | 
						|||
| 
								 | 
							
								    conn.Close(); 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```
							 |