繁体   English   中英

如何创建自己的异常?

[英]How can I create my own exception?

这是我拥有的代码的骨架:

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
}

如何从else块调用LogException方法? 我尝试将字符串强制转换为异常并创建异常。

一个更好的问题是,imo不是,但是为什么要这么做? 为什么不定义两个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实例并不是真正明智的选择。

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

您是否考虑过将// write ex.message to another log file行为的// 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
}

您还可以使自己的异常类如下:

public class LogException: Exception
        {

            public LogException() : base()
            {
            }

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

            }

        }
Exception e = new Exception(error);      
LogException ee = new LogException (Exception e);
    throw ee;

把它放在else块中

您可以做类似前面提到的事情

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

但是创建自己的异常类可能会更好:

class MyException : Exception 
{
    //...
}

然后

LogException(new MyException());

到目前为止,一些好的解决方案。 您是否不想仅为记录其他人创建一个自定义的例外而拥有一个WTF? 时刻阅读您的代码。

另一种方法是只从异常日志中提取消息。

if(CheckForSomething())
{
    try
    {
        // do something
    }
    catch (UnauthorizedAccessException ex)
    {
        LogMessage(ex.Message);
    }

}
else
{
    LogMessage("Some Error!");
}
private static void LogMessage(string message)
{
  //write message to log
}

创建异常的唯一目的是将异常传递为方法处理的格式。 它打破了程序员之间关于什么是异常及其用途的隐含理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM