Introduction
This little tip or code snippet provides a handy way to raise an exception without having to call String.Format
for the exception message.
Background
I am writing a service which imports files, does calculations, and exports on to an HTTP API. I ended up doing a lot of what I've always disliked doing, and that is always having to use string
format to build the message parameter for the throw
calls.
Using the Code
The code looks like this:
private void ThrowException<T>(string message, params object[] values) where T : Exception, new()
{
var exception = (T)Activator.CreateInstance(typeof(T), string.Format(message, values));
throw exception;
}
And you would simply use it like this:
ThrowException<InvalidOperationException>("VehicleMovementBatch Id {0} was not located.", batchId);
Points of Interest
I found it quite interesting that I can't instantiate a type parameter with parameters, e.g. var x = new T("Hello")
is not allowed by the compiler, even if a constructor for T
has a string
parameter, I had to go work around that and use CreateInstance
.
Nearly all of the exceptions I am raising are brand new, i.e., they are not based on another caught exception, so I haven't allowed for an innerException
parameter. That would be very easy to add, but remember to make it optional.