What is the Difference Between throw and throw ex in C#

The main difference between throw and throw ex in C# is that the throw provides information about from where the exception was thrown and also about the actual exception while the throw ex provides information only about from where the exception was thrown. 

C# is a modern general-purpose programming language. It provides multiple advantages such as support for multithreading, automatic garbage collection, Lambda expressions, events and many more. An exception is a problem that occurs in a program. It can stop the execution of the program. C# provides methods to handle exceptions. A programmer can use try, catch, finally and throw keywords to handle exceptions. He can also place the code that can cause an exception inside the try block. The catch indicates the catching of an exception. The terminating statements are inside the finally block. However, it is not mandatory to have a finally block. The throw keyword allows a program to throw an exception when a problem occurs. Another set of keywords is “throw ex”. Let us see the difference between throw and throw ex.

Key Areas Covered

1What is throw in C#
      – Definition, Program
2What is throw ex in C#
      – Definition, Program
3Difference Between throw and throw ex in C#
      – Comparison of Key Differences

Key Terms

C#, throw, throw ex

Difference Between throw and throw ex in C# - Comparison Summary

What is throw in C#

The programmer can use throw statement in the catch block to throw the exception to log the exception. For example, refer to the below program.

Difference Between throw and throw ex in C#

Figure 1: C# program with throw

There is a method called DivideByZero. It accepts an integer parameter and divides that number by zero. In the main program, the DivideByZero method is called inside the try block. It causes an exception and the catch block is executed. As the catch block has the throw keyword, it will throw an exception. When observing the output, we can see the full stack trace information. It provides information about from where the exception was thrown (line 9) as well as where the actual exception has occurred (line 15).

What is throw ex in C#

The programmer can use throw ex statement in the catch block to throw the exception to log the exception similar to throw, but it has a slight difference.

Main Difference - throw in C# vs throw ex in C#

Figure 2: C# program with throw ex

There is a method called DivideByZero. It accepts an integer parameter and divides that number by zero. In the main program, the DivideByZero method is called inside the try block. It causes an exception and the catch block is executed. As the catch block has the throw ex keywords, it will throw an exception. When observing the output, we can see that it provides information about where the exception was thrown (line 9). However, it does not indicate from where the actual exception was thrown. Therefore, throw ex does not give all stack trace information.

Difference Between throw and throw ex in C#

Definition

While throw is a keyword that singles the occurrence of an exception during the program execution, throw ex is a keyword in C# that allows the programmers to indicate the occurrence of an exception which resets the stack trace. Thus, this is the main difference between throw and throw ex in C#.

Stack Trace Information

Also, another difference between throw and throw ex in C# is that throw provides full stack trace information while throw ex does not provide all stack trace information.

Functionality

Moreover, functionalty is also an important difference between throw and throw ex in C#. The throw does not reset stack trace and thus, the programmer can get information about the actual exception. However, throw ex reset the stack trace, so the error appears from the line where the throw ex was written.

Conclusion

Both throw and throw ex helps to handle exceptions. Unlike throw ex, throw provides all stack information. The main difference between throw and throw ex in C# is that throw provides information about from where the exception was thrown and also about the actual exception while throw ex provides information only about from where the exception was thrown.  In brief, it is a good programming practice to use “throw” than “throw ex” as it provides accurate stack information.

References:

1.“C# – Throw Keyword.” TutorialsTeacher.com, Available here.
2.Rpetrusha. “Throw – C# Reference.” Microsoft Docs, Available here.

About the Author: Lithmee

Lithmee holds a Bachelor of Science degree in Computer Systems Engineering and is reading for her Master’s degree in Computer Science. She is passionate about sharing her knowldge in the areas of programming, data science, and computer systems.

Leave a Reply