Правильно, я знаю, что я полностью буду выглядеть идиотом с этим, но мой мозг просто не пинает сегодня утром.
Я хочу иметь метод, где я могу сказать "если это плохо, вернитесь с этим типом исключения", правильно?
Например, что-то вроде (и это не работает):
static ExType TestException<ExType>(string message) where ExType:Exception
{
Exception ex1 = new Exception();
ExType ex = new Exception(message);
return ex;
}
Теперь что нас смущает, так это то, что мы ЗНАЕМ, что общий тип будет иметь тип исключения из-за предложения where. Однако код выходит из строя, потому что мы не можем неявно использовать Exception для ExType. Мы также не можем его явно преобразовать, например:
static ExType TestException<ExType>(string message) where ExType:Exception
{
Exception ex1 = new Exception();
ExType ex = (ExType)(new Exception(message));
return ex;
}
Как это не удается... Так что возможно такое? У меня есть сильное чувство, что это будет очень просто, но у меня тяжелый день со старым ноггином, поэтому вырезать мне немного слабину: P
Update
Спасибо за ответы, ребята, похоже, что я не был полным идиотом!;)
ОК, поэтому Vegard и Сэм включил меня в точку, где я мог бы создать правильный тип, но затем явно застрял, потому что параметр сообщения доступен только для чтения после создания экземпляра.
Matt поразил гвоздь прямо на голове своим ответом, я протестировал это, и все работает отлично. Вот пример кода:
static ExType TestException<ExType>(string message) where ExType:Exception, new ()
{
ExType ex = (ExType)Activator.CreateInstance(typeof(ExType), message);
return ex;
}
Сладкое!:)
Спасибо, ребята!