Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / programming / exceptions

Intrinsic String.Format in Exception Throwing

5.00/5 (2 votes)
22 Apr 2013CPOL 7.2K  
A handy way to raise an exception without having to call String.Format for the exception message

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:

C#
private void ThrowException<T>(string message, params object[] values) where T : Exception, new()
{
    // NOTE Cannot provide arguments when creating an instance of a type parameter T.
    var exception = (T)Activator.CreateInstance(typeof(T), string.Format(message, values));
    throw exception;
}  

And you would simply use it like this:

C#
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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)