这是我所拥有的代码的骨架:
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方法?我尝试将字符串转换为异常并创建异常。
答案 0 :(得分:9)
一个更好的问题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
实例并不是因为这样的日志记录。
答案 1 :(得分:8)
LogException(new Exception("some error"));
答案 2 :(得分:4)
您是否考虑将// 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 :(得分:3)
您也可以像这样制作自己的异常类:
public class LogException: Exception
{
public LogException() : base()
{
}
public LogException(string message) : base(message)
{
}
}
答案 4 :(得分:1)
Exception e = new Exception(error);
LogException ee = new LogException (Exception e);
throw ee;
把它放在else块
中答案 5 :(得分:1)
你可以做类似前面提到的事情
LogException(new Exception("some error"));
但是创建自己的异常类可能更好:
class MyException : Exception
{
//...
}
然后
LogException(new MyException());
答案 6 :(得分:0)
到目前为止一些好的解决方案。你不想创建一个自定义异常只是为了记录别人会有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
}
创建异常只是为了将其传递给由方法处理的格式,这是一种破解。它打破了程序员之间关于什么例外以及它们用于什么的隐含理解。