在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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 |
请发表评论