• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#中的异常学习

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

//自己的总结:
//(1)当成员抛出异常时对性能的影响是指数级
//(2)不要因异常可能对性能造成负面影响而使用错误码
//(3)提高性能可以使用Tester-Doer模式或Try-Parse模式
//(4)异常是向上传递,层层上抛,我们可以在每个子方面中thow具体异常并附加更多信息,在主方面中捕获这些异常.


using System.Runtime.Serialization;namespace ExceptionDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            TryPaserDemo();
            TesterDoerDemo();
            TryCatchFianlly();
            ThowExceptionDemo();
            FinallyDemo();
            MyDefineExceptionDemo();
            Console.ReadKey();
        }

        /// <summary>
        /// Tester-Doer模式
        /// 条件:"test"操作远比"do"操作快(避免多线程)
        /// </summary>
        private static void TesterDoerDemo()
        {
            string str = null;
            if (str != null)
            {
                Console.WriteLine(str.ToLower());
            }           
        }
        
        /// <summary>
        /// Try-Parse模式
        /// </summary>
        private static void TryPaserDemo()
        {
            string strDateTime="2012-13-24";
            DateTime dt;
            if (DateTime.TryParse(strDateTime, out dt))
            {
                Console.WriteLine(dt);
            }
            else
            {
                Console.WriteLine("该字符串时间非法");
            }

        }

        private static void TryCatchFianlly()
        {         
            try
            {
                Divede(5, 0);
            }          
            catch 
            {
            }          
        }
        private static int Divede(int a,int b)
        {
            int c = 0;
            try
            {
                c = a / b;
              
            }
            catch (DivideByZeroException ex)//捕捉具体异常类
            {
                throw;
            }
            catch (Exception ex)
            {
            }
            return c;
        }
        /// <summary>
        /// throw Demo
        /// 可以使用 throw 语句显式引发异常。还可以使用 throw 语句再次引发捕获的异常。较好的编码做法是,向再次引发的异常添加信息以在调试时提供更多信息。
        /// 下面的代码示例使用 try/catch 块捕获可能的 FileNotFoundException。
        /// try 块后面是 catch 块,catch 块捕获 FileNotFoundException,如果找不到数据文件,则向控制台写入消息。
        /// 下一条语句是 throw 语句,该语句引发新的 FileNotFoundException 并向该异常添加文本信息。
        /// </summary>
        private static void ThowExceptionDemo()
        {
            try
            {
                string strPath1= @"C:\data.txt";
                string strPath2 = @"D:\data.txt";
                FileOperation(strPath1);
                FileOperation(strPath2);
                
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
        private static void FileOperation(string filePath)
        {
            FileStream fs = null;
            try
            {

                fs = new FileStream(filePath, FileMode.Open);
                StreamReader sr = new StreamReader(fs);
                string line;
                line = sr.ReadLine();
                Console.WriteLine(line);
            }
            catch (FileNotFoundException e)
            {

                Console.WriteLine("[Data File Missing] {0}", e);
                throw new FileNotFoundException(filePath, e);
            }
            catch (Exception ex)
            { 
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
        }
        /// <summary>
        /// FinallyDemo
        /// 异常发生时,执行将终止,并且控制交给最近的异常处理程序。这通常意味着不执行希望总是调用的代码行。有些资源清理(如关闭文件)必须总是执行,即使有异常发生。为实现这一点,可以使用 Finally 块。Finally 块总是执行,不论是否有异常发生。
        /// 下面的代码示例使用 try/catch 块捕获 ArgumentOutOfRangeException。Main 方法创建两个数组并试图将一个数组复制到另一个数组。该操作生成 ArgumentOutOfRangeException,同时错误被写入控制台。Finally 块执行,不论复制操作的结果如何。
        /// </summary>
        private static void FinallyDemo()
        {
            int[] array1 = { 0, 0 };
            int[] array2 = { 0, 0 };
            try
            {
                Array.Copy(array1, array2, -1);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Error: {0}", e);
            }
            finally
            {
                Console.WriteLine("This statement is always executed.");
            }
        }
        /// <summary>
        /// 自定义异常Demo
        /// </summary>
        private static void MyDefineExceptionDemo()
        {
            int score=80;
            if(score<81)
            {
                throw new  MyDefineException();
            }
        }

 
    }
    /// <summary>
    /// 自定义异常类
    /// </summary>
    public class MyDefineException : Exception,ISerializable
    {
        public MyDefineException() 
        { }

        public MyDefineException(string message) { }
        public MyDefineException(string message, Exception inner) { }
        protected MyDefineException(SerializationInfo info, StreamingContext context) { }

    }
}

下载地址

参考链接:

http://www.cnblogs.com/cntosoft/archive/2012/09/06/2673708.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#基础之is,as关键字发布时间:2022-07-14
下一篇:
Effect c#收藏发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap