{ if (reader != null) { reader.Close(); } } return source; } 当然,对reader.close()的保护并不是ReadSource的理想版本。但是,如果仅从它的效果上看,这将是一个合理的版本。最终,工作。它和最初的版本已经大不相同。稍微努力,你能复用下面这段代码: private static char[] ReadSource(string filename) { FileInfo file = new FileInfo(filename); int length = (int)file.Length; char[] source = new char[length]; TextReader reader = file.OpenText(); try { reader.Read(source, 0, length); } finally { if (reader != null) { reader.Close(); } } return source; } 在某些情况下,你可以在finally程序块中对可能出现空值进行判断(上面就是一个这样的例子),但是一般说来,你最好还是在finally程序块中判断一下(考虑到如果file.OpenText返回空值,或者如果reader被放进了try程序块中,或者reader作为ref/out参数被传递到try程序块中)。你不得不增加一个try程序块,一个finally程序块,和一个if防护。如果你正在使用Java,你不得不每一次都去做这些事情。在那里是个最大的问题。如果这个解决方案非常令人厌烦且完全偏离于最初的“完美”方案,这没有关系,你能够将这些异常提取到一块。在Java中,你不能这么做。遇到异常,Java将停止运行,而C#则将继续。 四、using语句 在C#中,最接近于“理想”版本的是使用using语句: private static char[] ReadSource(string filename) { FileInfo file = new FileInfo(filename); int length = (int)file.Length; char[] source = new char[length]; using (TextReader reader = file.OpenText())
|
正在阅读:C#中的异常处理(二)C#中的异常处理(二)
2004-02-14 09:34
出处:PConline
责任编辑:linjixiong
键盘也能翻页,试试“← →”键