Course Content
C# Beyond Basics
C# Beyond Basics
Error Handling
You might have come across the term runtime error in previous chapters. A runtime error is an error which occurs while the program is running - hence the name "runtime" error.
Usually when a runtime error occurs, the program crashes or stops responding.
The compiler can help us by pointing out most of the errors in our code but runtime errors are mostly unpredictable and often depend on uncertain parameters.
For-example, in case the file path passed into StreamReader
is invalid or does not exist, it will give a runtime error and the program will crash. Therefore, we often put such dangerous code into try-catch
blocks to try some code, and in case it fails, we catch and deal with the error instead of causing the program to crash.
Following is the syntax of the try-catch
block:
index
try { // code to try } catch (Exception errorVar) { // code to handle error }
Here Exception
is a keyword which represents the datatype Exception.
Example:
index
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Following are some common cases where a runtime error can occur:
Division By Zero
index
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }
Invalid Index of an Array or a List
index
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }
Key Not Found (for Dictionaries):
index
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }
The "finally" Block
There's also an option code block called finally
which is executed after the catch
block is executed:
index
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }
Everything was clear?