• try_catch_finally应用(From larrysunday)


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;

    namespace test_try_catch_finally
    {
        class Program
        {
            private static bool OpenFile()
            {
                bool ret = false;
                try
                {
                    try
                    {
                        File.Open(@"C:\windows\notepad.x", FileMode.Open);
                        ret = true;
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                        Console.WriteLine("Exception:{0}", ex.Message);
                        ret = true;
                    }
                    finally
                    {
                        Console.WriteLine("Finally");
                        ret = true;
                    }
                    Console.WriteLine("ret:{0}", ret.ToString());
                    return ret;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception:{0}", ex.Message);
                    ret = false;
                }
                Console.WriteLine("ret:{0}", ret.ToString());
                return ret;
            }

            static void Main(string[] args)
            {
                Console.WriteLine("RET:{0}", OpenFile());
                Console.ReadKey();
            }
        }
    }


    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    以上代码测试结果,觉得它的执行顺序很值得纪录:

    首先在底层的顺序是, try中File.Open(@"C:\windows\notepad.x", FileMode.Open);报错后,跳进底层catch块执行完throw后,接着马上跳进底层finally块执行完,接着就跳进上层的catch块了,执行完上层catch后,最后去执行完上层catch块后面的Console.WriteLine("ret:{0}", ret.ToString());  return ret;

    --------------------------致此,函数的调用得以完成.


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;

    namespace test_try_catch_finally
    {
        class Program
        {
            private static bool OpenFile()
            {
                bool ret = false;
                try
                {
                    try
                    {
                        File.Open(@"C:\windows\notepad.x", FileMode.Open);
                        ret = true;
                    }
                    catch (Exception ex)
                    {
                        return false;
                        throw ex;
                        Console.WriteLine("Exception:{0}", ex.Message);
                        ret = true;
                    }
                    finally
                    {
                        Console.WriteLine("Finally");
                        ret = true;
                    }
                    Console.WriteLine("ret:{0}", ret.ToString());
                    return ret;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Exception:{0}", ex.Message);
                    ret = false;
                }
                Console.WriteLine("ret:{0}", ret.ToString());
                return ret;
            }

            static void Main(string[] args)
            {
                Console.WriteLine("RET:{0}", OpenFile());
                Console.ReadKey();
            }
        }
    }


    下面的因为低层的catch中有return false;在throw ex;之前,所以在catch中走完return false;之后,直接跳进底层finally块执行完,函数就调用结束了...

  • 相关阅读:
    Web Components 是什么
    HAL_RTC_MspInit Msp指代什么?
    C 枚举 相同的值
    EntityFramework Core并发深挖详解,一纸长文,你准备好看完了吗?
    ASP.NET Core MVC之ViewComponents(视图组件)知多少?
    .NET Core 1.1日期解析无APi、SQL Server数据转换JSON
    SQL Server-字字珠玑,一纸详文,完全理解SERIALIZABLE最高隔离级别(基础系列收尾篇)
    SQL Server-聚焦NOLOCK、UPDLOCK、HOLDLOCK、READPAST你弄懂多少?(三十四)
    SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)
    ASP.NET Core MVC上传、导入、导出知多少
  • 原文地址:https://www.cnblogs.com/SouthAurora/p/2268059.html
Copyright © 2020-2023  润新知