Try/Catch on StreamReader(字符串路径)用作基类
本文关键字:路径 基类 字符串 Catch on StreamReader Try | 更新日期: 2023-09-27 17:58:37
我创建了一个继承.net StreamReader的类。在该类中,它的构造函数继承了基方法StreamReader(字符串路径)。。。
public class CsvFileReader : StreamReader
{
public CsvFileReader(string filename) : base (stream)
{
..do whatever
}
}
这个代码块被调用如下。。
using (CsvFileReader reader = new CsvFileReader(filename))
{
...Do whatever somemore...
}
我的问题是…你如何在读者身上发现一个例外?您无法从CsvFileReader实例捕获它(即包装using语句),当然也不能在dll中捕获。。。
请协助。。
对于Clarity
我尝试了以下实现,但它在构造函数调用上失败,而不是在using块上。。。
try
{
using (CsvFileReader reader = new CsvFileReader(filename))
{
...Do whatever Again...
}
} catch(Exception e)
{
Do whatever with the Exception..
}
似乎希望CsvFileReader构造函数在基类抛出时执行某些操作。例如,包装异常或尝试从中恢复。
不幸的是,如果StreamReader
在构造函数中失败,您将无法获得CsvFileReader
的实例,因此您在CsvFileReader
中编写的任何代码都无法执行任何有意义的操作。
如果StreamReader
提供了一个不带任何参数的构造函数并使用该构造函数,那就太好了,但由于StreamReader
没有,你就没有什么可做的了。
-
不要实现那个构造函数。强制用户传入一个流。这样,除非他们有一个有效的流,否则他们不会到达你的构造函数。
-
接受基本构造函数将抛出的事实,并让用户像您一样处理它。在使用或使用
try{} catch{} finally {dispose}
周围添加try{}catch} -
从
TextReader
继承并实现您需要的功能,并提供一个构造函数来接收适合您用途的字符串