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:
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:
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