【发布时间】:2026-01-13 17:05:02
【问题描述】:
如何在 C# 中更改 Exception 对象的 Message?
奖金聊天
Exception 的 Message 属性是只读的:
public virtual string Message { get; }
补充阅读
用 PHP 回答了同样的问题,“你不能”,但给出了解决方法:
但是,您可以确定它的类名和代码,并抛出一个新的,相同的类,具有相同的代码,但具有不同的消息。
如何确定异常的类名,并在 C# 中抛出一个新的相同类,但消息不同?
例如:
catch (Exception e)
{
Exception e2 = Activator.CreateInstance(e.GetType());
throw e2;
}
不起作用,因为异常的 Message 属性是只读的并且是 .NET。请参阅原始问题。
更新
我尝试捕获我期望的每种异常类型:
try
{
reader.Read();
}
catch (OleDbException e)
{
throw new OleDbException(e, sql);
}
catch (SqlException e)
{
throw new SqlException (e, sql);
}
catch (IBM.DbException e)
{
throw new IBM.DbException(e, sql);
}
catch (OdbcException e)
{
throw new OdbcException (e, sql);
}
catch (OracleException e)
{
throw new OracleException (e, sql);
}
除了现在我的代码强制依赖程序集,这不会出现在每个解决方案中。
另外,现在异常似乎来自我的代码,而不是抛出它的行;我丢失了异常的位置信息
【问题讨论】: