请参阅以下代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
mymethod();
}
catch (Exception ex)//First catch
{
MessageBox.Show(ex.ToString());
}
}
private void mymethod()
{
int a = 10;
int b = 0;
try
{
int c = a / b;
}
catch (Exception ex)//Second catch
{
MessageBox.Show(ex.ToString());
//int c = a / b;
throw new Exception(ex.ToString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想catch在第二次catch执行后强制第一次执行!如何强制执行上述操作并显示第二个catch错误?我想看到ex.ToString() …
我在try/catch块中有一个语句,但异常没有被捕获.谁能解释一下?
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例.
来源错误:
Line 139: try
Line 140: {
Line 141: return (int)Session["SelectedLeadID"];
Line 142: }
Line 143: catch (Exception ex)
Run Code Online (Sandbox Code Playgroud)
更新 这是一个ASP.NET应用程序.在catch块中,抛出一个新异常.您看到的代码是ASP.NET错误页面上显示的内容.
我们通过WCF从客户端(Silverlight)接收文件,在服务器端我解析此文件.文件中的每一行都转换为一个对象并存储到数据库中.如果文件非常大(10000个条目和更多),我收到以下错误(MSSQLEXPRESS):
与当前连接关联的事务已完成但尚未处理.必须先处理事务,然后才能使用连接执行SQL语句.
我尝试了很多(TransactionOptions超时设置等),但没有用.上面的异常消息是在3000之后引发的,有时是在处理了6000个对象之后引发的,但是我无法成功处理所有对象.
我追加了我的来源,希望有人有个主意,可以帮助我:
public xxxResponse SendLogFile (xxxRequest request
{
const int INTERMEDIATE_SAVE = 100;
using (var context = new EntityFramework.Models.Cubes_ServicesEntities())
{
// start a new transactionscope with the timeout of 0 (unlimited time for developing purposes)
using (var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions
{
IsolationLevel = System.Transactions.IsolationLevel.Serializable,
Timeout = TimeSpan.FromSeconds(0)
}))
{
try
{
// open the connection manually to prevent undesired close of DB
// (MSDTC)
context.Connection.Open();
int timeout = context.Connection.ConnectionTimeout;
int Counter = 0;
// read …Run Code Online (Sandbox Code Playgroud) 有没有办法覆盖异常的消息?
我不想创建自定义异常,而是覆盖现有异常的消息.
例如:每次ArgumentOutOfRangeException抛出a时,我都希望它包含我的消息而不是默认消息.
可能吗?
我想知道是否有能力在表达式 switch 情况下重新抛出现有异常(在 catch 子句中)?请看一下代码示例:
try
{
// Some code...
}
catch (Exception ex)
{
return ex switch
{
ExceptionA => // return some value with expression.
ExceptionB => // return some value with expression
_ => throw ex
}
}
Run Code Online (Sandbox Code Playgroud)
该代码将以以下错误结束:
重新抛出捕获的异常会更改堆栈信息
该代码仅供示例之用;很明显,语句 switch case 是显而易见的解决方案
switch (ex)
{
case 1: ...
case 2: ...
default: throw;
{
Run Code Online (Sandbox Code Playgroud) 我有一些代码捕获异常,回滚事务然后重新抛出异常.
catch ( Exception exSys ) {
bqBusinessQuery.RollBackTransaction();
throw exSys ;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用此代码,VS代码分析会抛出警告说
使用不带参数的'throw',以保留最初引发异常的堆栈位置.
如果我使用代码
catch ( Exception exSys ) {
bqBusinessQuery.RollBackTransaction();
throw;
}
Run Code Online (Sandbox Code Playgroud)
然后我收到警告说
变量'exSys'已声明但从未使用过
我该如何解决这个问题?
编辑 我试过这个方法,但它不起作用.system.exception类需要额外的消息以及内部异常.如果我这样做,它将抛出一条新消息,覆盖原始异常中的消息.我不想得到新的异常,我想用相同的消息抛出相同的异常.
catch (System.Exception ex)
{
throw new System.Exception(ex);
}
Run Code Online (Sandbox Code Playgroud)
编辑
catch (System.Exception ex)
{
throw new System.Exception("Test",ex);
}
Run Code Online (Sandbox Code Playgroud)
尝试过这种方法.然后使用手动导致异常throw new Exception("From inside");.现在,ex.Message返回"Test"而不是"From inside".我希望保留"从内部"消息.这种建议的更改会导致错误显示代码无处不在.:/