66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Exceptions
							 | 
						|||
| 
								 | 
							
								localeTitle: Исключения
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								# Исключения
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Исключением является непредвиденная ошибка, возникающая во время работы программы, например попытка получить доступ к файлу, который не существует. Он остановит программу, если не будет обработан.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## пример
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Если мы попытаемся прочитать текст файла, который не существует:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								using System.IO; 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 string content = File.ReadAllText(@"C:\DoesNotExist.txt"); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Будет `FileNotFoundException` .
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Некоторые другие общие исключения:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   `IndexOutofRangeException` : Попытка получить доступ к массиву с недопустимым индексом.
							 | 
						|||
| 
								 | 
							
								*   `NullReferenceException` : Попытка использовать неназначенную ссылочную переменную.
							 | 
						|||
| 
								 | 
							
								*   `DivideByZeroException` : Попытка деления на 0.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## Лучшие практики
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Используйте try / catch / finally Blocks
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								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(); 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```
							 |