Кастинг исключений в C # - PullRequest
       24

Кастинг исключений в C #

2 голосов
/ 02 августа 2010

Почему я получаю InvalidCastException при попытке сделать это?

throw (ArgumentNullException)(new Exception("errormessage", null));

Это упрощенная версия следующей функции.

public static void Require<T>(bool assertion, string message, Exception innerException) where T: Exception
    {
        if (!assertion)
        {
            throw (T)(new Exception(message, innerException));
        }
    }

Полное сообщение об ошибке::

System.InvalidCastException: Невозможно привести объект типа «System.Exception» к типу «System.ArgumentNullException».

Ответы [ 3 ]

6 голосов
/ 02 августа 2010

У меня сложилось впечатление, что вы создаете экземпляр базового класса и пытаетесь преобразовать его в производный класс. Я не думаю, что вы можете сделать это, так как Exception более «универсален», чем ArgumentNullException. Вы можете сделать это и наоборот.

2 голосов
/ 02 августа 2010

Вы можете попробовать это вместо:

public static void Require<T>(bool assertion, string message,
    Exception innerException) where T: Exception
{
    if (!assertion)
    {
        throw (Exception) System.Activator.CreateInstance(
            typeof(T), message, innerException);
    }
}
0 голосов
/ 02 августа 2010

System.Exception - это не объект, к которому вы приводите; это так просто. Бросьте исключение другого типа напрямую, если вы хотите вызвать этот тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...