Как создать экземпляр аргумента универсального типа с помощью параметризованного конструктора в C #

Я пытаюсь написать вспомогательный метод, который регистрировал бы сообщение и генерировал исключение указанного типа с тем же сообщением. У меня есть следующее :

private void LogAndThrow<TException>(string message, params object[] args) where TException : Exception, new()
{
    message = string.Format(message, args);
    Logger.Error(message);
    throw new TException(message);
}

Перед добавлением ограничения new () компилятор жаловался, что без него я не могу создать экземпляр TException . Теперь я получаю сообщение об ошибке: «Невозможно предоставить аргументы при создании экземпляра параметра типа TException». Я попытался создать экземпляр с помощью конструктора без параметров, а затем установить свойство Message , но оно доступно только для чтения.

Это ограничение языка или есть решение, о котором я не знаю? Возможно, я мог бы использовать отражение, но это излишне для такой простой задачи. (И довольно уродливо, но это личное мнение.)

21
задан neo2862 11 December 2010 в 18:02
поделиться