Search code examples
c#exceptiontry-catch

Using a Dictionary<TKey, TValue> with Exceptions


I'm trying to figure out how I can save Exceptions within a dictionary in c#.

For example, I try:

Dictionary<Exception, Exception> myCustomExceptions = new() 
{
    { DbUpdateException, CustomExceptionX },
    { InvalidOperationException, CustomExceptionY }
}

Then I try to do something like this:

try
{
    ...
}
catch (Exception exception)
{
    throw myExceptions[exception];
}

But this however does not work unfortunately... Can someone please help me with this particular issue?


Solution

  • You need to store a factory which can make new exception instances on demand.

    Dictionary<Type, Func<Exception>> myCustomExceptions = new() 
    {
        { typeof(DbUpdateException), () => new CustomExceptionX() },
        { typeof(InvalidOperationException), () => new CustomExceptionY() }
    }
    
    try
    {
        ...
    }
    catch (Exception exception)
    {
        var exceptionType = exception.GetType();
        var factory = myExceptions[exceptionType];
        var ex = factory();
        throw ex;
    }