Do not throw a System.Exception . Someday.
The problem with this is the call code. Bad practice is to catch a common Exception object for many reasons. If you throw an instance of the base class Exception , then calling the code has no choice but to catch Exception if it wants to handle it. This forces the calling code to use bad practice.
In addition, the calling code does not have reliable means to highlight what an exception is if all it receives is an Exception .
It is usually best to use one of the predefined exceptions if applicable ( ArgumentException , InvalidOperationException , etc.). If they do not correctly describe the situation, then a special class of exceptions is a great way.
source share