前言:Jon Jagger先生是一个经历丰富的人,写的文章简单而发人深省。大家可以到他的网站上浏览一番,必然受益匪浅。这篇文章虽然比较简单,翻译当中难免出现错误,希望大家多多指教。 PS:这篇文章非常简单,如果你感觉到自己已经到达一定的水平,那么,请不要浪费时间了^_^
一 、令人痛苦的程式化错误处理
异常还没出现前,处理错误最经典的方式就是使用错误代码检查语句了。例如 public sealed class Painful { ... private static char[] ReadSource(string filename) { FileInfo file = new FileInfo(filename); if (errorCode == 2342) goto handler; int length = (int)file.Length; char[] source = new char[length]; if (errorCode == -734) goto handler; TextReader reader = file.OpenText(); if (errorCode == 2664) goto handler; reader.Read(source, 0, length); if (errorCode == -5227) goto handler; reader.Close(); Process(filename, source); return source; handler: ... } } 这种编码方式单调乏味,翻来复去,难以使用,看起来非常的复杂,而且还使得基本功能很不清晰。并且还很容易忽略错误(故意或者偶尔的遗忘)。现在好了,有很多来处理这种情况,但是其中必有一些处理方式要好过其他的。
二、关系分离
异常所能做到的最基本的事情就是允许你将错误和基本功能分离开来。换句话,我们能将上面的改写如下: ... public sealed class PainLess { public static int Main(string[] args) { try { string filename = args[0]; char[] source = ReadSource(filename); Process(filename, source); return 0; } catch (SecurityException caught) { ... } catch (IOException caught) { ... } catch (OutOfMemoryException caught) { ... } ... }
|