C#中 你只要try{} catch(){},不加Finally{}部分就是了

解决方案 »

  1.   

    没有就不用吧,C++中还没有finally呢。随便用个变量保存状态,在finally中判断一下不就可以了。
      

  2.   

    Try
      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嵌套。
      

  3.   

    机制问题
    去问ANDERS HEJSLBERG
      

  4.   

    只要try{} 
       catch(){},
    不加Finally{}部分就可以了
    咋说呢
    就算是机制问题吧
      

  5.   


    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 块的结束点是可到达的。 
      

  6.   

    // 俺来举个例,finally块虽然一定要执行,但是可以用代码来判断执行// ......
    SqlCommand sqlcmd = new SqlCommand();
    SqlDataReader sqldr = null;
    try
    {
        // ......
        sqldr = sqlcmd.ExecuteReader();
    }
    catch
    {
        if (sqldr != null) sqldr.Close(); // 判断一下是否建立sqldr,如果是则Close();
        sqlcmd.Dispose();
    }
    finally
    {
    }
      

  7.   

    自己在try...catch...中加判断达到跳出的功能!
      

  8.   

    c++中也没有的呀
    只用
    try......
    catch......
    就OK了
      

  9.   

    finally中的代码无论怎样都要执行的
      

  10.   

    bool flag = false;
    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
    加个判断就好了
      

  11.   

    finally块的作用就是保证无论如何都能够执行
    你不想执行的放到finally里做什么
    还说人家语言缺陷...