Create a new exception–add fields and/or properties
This post is not about why we need custom exception (https://blogs.msdn.microsoft.com/jaredpar/2008/10/20/custom-exceptions-when-should-you-create-them/ ) . It is (more a rant ) about a specific item in best practices in Exceptions( https://docs.microsoft.com/en-us/dotnet/standard/exceptions/best-practices-for-exceptions )
It says:
In custom exceptions, provide additional properties as needed
Provide additional properties for an exception (in addition to the custom message string) only when there’s a programmatic scenario where the additional information is useful. For example, the FileNotFoundExceptionprovides the FileName property.
What I want to add : In EVERY exception that you create in code, DEFINE a custom field. It is useless without !
Why this rant ? In Stankins I have to intercept KeyNotFoundException and I want to find the Key that was not found ( problem with some dictionary ) to provide it (Yes, it is a flawed design – but this is not the point here) . The problem was the definition:
01 02 03 04 05 06 07 08 09 10 11 | public class KeyNotFoundException : SystemException, ISerializable { public KeyNotFoundException(); public KeyNotFoundException( string message); public KeyNotFoundException( string message, Exception innerException); protected KeyNotFoundException(SerializationInfo info, StreamingContext context); } |
See the problem ? No way to find WHAT is the Key that was not found. So I ended up with this code:
1 2 3 4 5 | name =innerKeyEx.Message; // The given key 'nameColumn' was not present in the dictionary. var first=name.IndexOf( "'" ); var last= name.IndexOf( "'" ,first+1); name= name.Substring(first+1,last-first-1); |
Moral of the post ? Do NOT define a custom Exception without defining a field / property inside!
Leave a Reply