Как я могу создать свое собственное исключение? - PullRequest
1 голос
/ 12 ноября 2010

Это скелет кода, который у меня есть:

if(CheckForSomething())
{
    try
    {
        //do something
    }
    catch (UnauthorizedAccessException ex)
    {
        LogException(ex, item.server);
    }
    catch (Exception ex)
    {
        LogException(ex, item.server);
    }
}
else
{
    string error = "Some error";
    //want to call LogException with error as argument
}

private static void LogException(Exception ex)
{
    //write ex to one log file
    // write ex.message to another log file
}

Как я могу вызвать метод LogException из блока else?Я попытался привести строку как исключение и создать исключение.

Ответы [ 7 ]

9 голосов
/ 12 ноября 2010

Лучший вопрос - не как, а почему вы хотите это сделать?Почему бы не определить две LogError перегрузки, одна из которых принимает Exception, а другая - string.

private static void LogError(Exception ex)
{
    // write ex to one log file
    // write ex.message to another log file
}

private static void LogError(string error)
{
    //nothing to write to exception-specific log file
    // write error info to another log file
} 

На самом деле не рекомендуется создавать собственный экземпляр Exception только для такой регистрации.

8 голосов
/ 12 ноября 2010
LogException(new Exception("some error"));
4 голосов
/ 12 ноября 2010

Рассматривали ли вы разделение поведения // write ex.message to another log file в отдельную функцию и вызов его с нужной вам строкой?

    if(CheckForSomething())
    {
        try
        {
            // do something
        }
        catch (UnauthorizedAccessException ex)
        {
            LogException(ex);
        }
        catch (Exception ex) // Never do this.  Do you know how to handle an OutOfMemoryException?
        {
            LogException(ex);
        }
    }
    else
    {
        string error = "Some error";
        LogMessage(error);
    }

private static void LogException(Exception ex)
{
    // write ex to one log file
    LogMessage(ex.Message);
}

private static void LogMessage(string message)
{
    // write message to another log file
}
3 голосов
/ 12 ноября 2010

вы также можете создать собственный класс исключений, например:

public class LogException: Exception
        {

            public LogException() : base()
            {
            }

            public LogException(string message) : base(message)
            {

            }

        }
1 голос
/ 12 ноября 2010

Вы можете сделать что-то, как упоминалось ранее

LogException(new Exception("some error"));

Но может быть лучше создать собственный класс исключений:

class MyException : Exception 
{
    //...
}

тогда

LogException(new MyException());
1 голос
/ 12 ноября 2010
Exception e = new Exception(error);      
LogException ee = new LogException (Exception e);
    throw ee;

Поместите это в блок else

0 голосов
/ 12 ноября 2010

Некоторые хорошие решения до сих пор.Вы не хотите создавать пользовательское исключение только для регистрации кого-то еще будет иметь WTF?момент чтения кодаформат, обрабатываемый методом, является хаком.Это нарушает неявное понимание программистами того, что такое исключения и для чего они используются.

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