Click here to Skip to main content
15,868,141 members
Articles / General Programming / Exceptions
Tip/Trick

Intrinsic String.Format in Exception Throwing

Rate me:
Please Sign up or sign in to vote.
5.00/5 (2 votes)
22 Apr 2013CPOL 7K   4  
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)


Written By
Founder Erisia Web Development
South Africa South Africa
I am a software developer in Johannesburg, South Africa. I specialise in C# and ASP.NET MVC, with SQL Server, with special fondness for MVC and jQuery. I have been in this business for about eighteen years, and am currently trying to master Angular 4 and .NET Core, and somehow find a way to strengthen my creative faculties.
- Follow me on Twitter at @bradykelly

Comments and Discussions

 
-- There are no messages in this forum --