C#中 你只要try{} catch(){},不加Finally{}部分就是了
解决方案 »
- C#打包安装 如何获取自定义安装中RadioButton中选中的那一项的值
- 求助正则表达式匹配
- DATALIST在编辑模式下DropDownList数据绑定
- c# 如何将2进制数转换为汉字,谢谢
- dnn初学者
- 谁有发票报表套打的例子,给个实现的方法也行!
- 读写XML文件时,经常碰到任务栏及桌面图标完全消失,何解?
- 对于c#编写的没有标题栏的窗体的问题
- datagrid里怎么获取选中的当前行的序号?也就是第几行?怎么设置当前行的背景色????
- 老问题 load crpe32.dll failed
- Asp.net+C#+Accessy应该如何做?请高人指教,小弟在线等侯.....!
- 如何传递参数给菜单事件?
Console.WriteLine("Before For Each loop")
For Each i In al
Console.WriteLine( i )
If i = 2 Then Exit Try
Next Console.WriteLine("After For Each loop - should never get here")Finally
Console.WriteLine("In Finally")
End Try如果用C#写。怎么退出try嵌套。
去问ANDERS HEJSLBERG
catch(){},
不加Finally{}部分就可以了
咋说呢
就算是机制问题吧
SDK says:break、continue 或 goto 语句将控制转移到 finally 块外部是编译时错误。当一个 break、continue 或 goto 语句出现在 finally 块中时,该语句的目标必须在同一 finally 块内,否则会发生编译时错误。return 语句出现在 finally 块中是一个编译时错误。try 语句按下列规则执行: 控制转到 try 块。
当(如果)控制到达 try 块的结束点时:
如果 try 语句具有 finally 块,则执行 finally 块。
控制转到 try 语句的结束点。
如果在 try 块执行期间,有一个异常传播到该 try 语句:
按 catch 子句出现的顺序(如果有的话)逐个对其进行检查,以找到一个合适的异常处理程序。检查过程中,第一个符合要求的 catch 子句(它所指定的异常类型与该异常的类型相同或是它的基类型)被认为是一个匹配项。常规 catch 子句被认为是任何异常类型的匹配项。如果找到匹配的 catch 子句:
如果匹配的 catch 子句声明一个异常变量,则当前的异常对象被赋给该异常变量。
控制转到匹配的 catch 块。
当(如果)控制到达 catch 块的结束点时:
如果 try 语句具有 finally 块,则执行 finally 块。
控制转到 try 语句的结束点。
如果在 catch 块执行期间有一个异常传播到 try 语句:
如果该 try 语句具有 finally 块,则执行 finally 块。
该异常传播到下一个封闭 try 语句。
如果该 try 语句没有 catch 子句或如果没有与异常匹配的 catch 子句:
如果该 try 语句具有 finally 块,则执行 finally 块。
该异常就传播到更外面一层(封闭)的 try 语句。
finally 块中的语句总是在控制离开 try 语句时先被执行。无论是什么原因引起控制转移(正常执行到达结束点,执行了 break、continue、goto 或 return 语句,或是执行一个导致离开 try 语句的异常传播),情况都是如此。如果在执行 finally 块期间引发了一个异常,则此异常将被传播到下一个封闭的 try 语句。与此同时,原先那个正在传播过程中的异常(如果存在的话)就会被丢弃。关于传播异常的过程,在 throw 语句(第 8.9.5 节)的说明中有进一步讨论。如果 try 语句是可到达的,则 try 语句的 try 块是可到达的。如果 try 语句是可到达的,则 try 语句的 catch 块是可到达的。如果 try 语句是可到达的,则 try 语句的 finally 块是可到达的。如果下列两个条件都为真,则 try 语句的结束点是可到达的: try 块的结束点是可到达的或者至少一个 catch 块的结束点是可到达的。
如果存在一个 finally 块,此 finally 块的结束点是可到达的。
SqlCommand sqlcmd = new SqlCommand();
SqlDataReader sqldr = null;
try
{
// ......
sqldr = sqlcmd.ExecuteReader();
}
catch
{
if (sqldr != null) sqldr.Close(); // 判断一下是否建立sqldr,如果是则Close();
sqlcmd.Dispose();
}
finally
{
}
只用
try......
catch......
就OK了
Try
Console.WriteLine("Before For Each loop")
For Each i In al
Console.WriteLine( i )
If i = 2 Then
{
flag = true;
return;
}
Console.WriteLine("After For Each loop - should never get here")Finally
if(flag)
Console.WriteLine("In Finally")
End Try
加个判断就好了
你不想执行的放到finally里做什么
还说人家语言缺陷...