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