c#中的异常(处理)
exception (handling) in c#
catch (Exception ex)
{
_errorCode = ErrorCodes.SqlGeneralError;
CommonTools.vAddToLog(ex, _errorCode, _userID);
throw new JOVALException(_errorCode);
}
我使用这段代码来处理名为 (JOVALException)
的自定义异常的错误,但是当发生异常时它会打开 "No source available" 页面并且告诉我那不是 堆栈跟踪 是空的
我该如何解决这个问题?
编辑
public JOVALException(ErrorCodes _errCode, String _message = "")
{
ErrMessage = _message;
ErrCode = _errCode;
}
这是我的构造函数,如何修改它?
当您调用 throw new JOVALException(_errorCode);
时,您丢失了原始错误的堆栈跟踪。
就这样:
throw;
如果你需要抛出一个 JOVALException
你需要稍微修改你的 class:
class JOVALException : Exception
{
public JOVALException(string errorCode, Exception innerException)
: base(errorCode, innerException)
{
}
}
还有一个例子:
try
{
int i = 0;
int foo = i / i;
}
catch (Exception ex)
{
_errorCode = ErrorCodes.SqlGeneralError;
CommonTools.vAddToLog(ex, _errorCode, _userID);
throw new JOVALException(_errorCode, ex);
}
将 ex
放入您的 JOVALException
作为 inner exception。
public JOVALException(ErrorCodes _errCode, String _message = "",
Exception innerException = null) : base(_message, innerException)
{
ErrMessage = _message;
ErrCode = _errCode;
}
我建议您通过添加构造函数来修改 JOVALException
class:
public class JOVALException: Exception {
...
// Note Exception "innerException" argument
public JOVALException(ErrorCodes _errCode, Exception innerException, String _message = "")
: base(_message, inner) {
...
}
}
另一个问题:尽量避免代码重复
ErrMessage = _message;
因为 ErrMessage
实际上是 Message
属性的重复;只需调用 base class 构造函数.
然后
catch (Exception ex)
{
_errorCode = ErrorCodes.SqlGeneralError;
CommonTools.vAddToLog(ex, _errorCode, _userID);
throw new JOVALException(_errorCode, ex); // <- Note "ex"
}
catch (Exception ex)
{
_errorCode = ErrorCodes.SqlGeneralError;
CommonTools.vAddToLog(ex, _errorCode, _userID);
throw new JOVALException(_errorCode);
}
我使用这段代码来处理名为 (JOVALException)
的自定义异常的错误,但是当发生异常时它会打开 "No source available" 页面并且告诉我那不是 堆栈跟踪 是空的
我该如何解决这个问题?
编辑
public JOVALException(ErrorCodes _errCode, String _message = "")
{
ErrMessage = _message;
ErrCode = _errCode;
}
这是我的构造函数,如何修改它?
当您调用 throw new JOVALException(_errorCode);
时,您丢失了原始错误的堆栈跟踪。
就这样:
throw;
如果你需要抛出一个 JOVALException
你需要稍微修改你的 class:
class JOVALException : Exception
{
public JOVALException(string errorCode, Exception innerException)
: base(errorCode, innerException)
{
}
}
还有一个例子:
try
{
int i = 0;
int foo = i / i;
}
catch (Exception ex)
{
_errorCode = ErrorCodes.SqlGeneralError;
CommonTools.vAddToLog(ex, _errorCode, _userID);
throw new JOVALException(_errorCode, ex);
}
将 ex
放入您的 JOVALException
作为 inner exception。
public JOVALException(ErrorCodes _errCode, String _message = "",
Exception innerException = null) : base(_message, innerException)
{
ErrMessage = _message;
ErrCode = _errCode;
}
我建议您通过添加构造函数来修改 JOVALException
class:
public class JOVALException: Exception {
...
// Note Exception "innerException" argument
public JOVALException(ErrorCodes _errCode, Exception innerException, String _message = "")
: base(_message, inner) {
...
}
}
另一个问题:尽量避免代码重复
ErrMessage = _message;
因为 ErrMessage
实际上是 Message
属性的重复;只需调用 base class 构造函数.
然后
catch (Exception ex)
{
_errorCode = ErrorCodes.SqlGeneralError;
CommonTools.vAddToLog(ex, _errorCode, _userID);
throw new JOVALException(_errorCode, ex); // <- Note "ex"
}