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..
    }

Try/Catch on StreamReader(字符串路径)用作基类

似乎希望CsvFileReader构造函数在基类抛出时执行某些操作。例如,包装异常或尝试从中恢复。

不幸的是,如果StreamReader在构造函数中失败,您将无法获得CsvFileReader的实例,因此您在CsvFileReader中编写的任何代码都无法执行任何有意义的操作。

如果StreamReader提供了一个不带任何参数的构造函数并使用该构造函数,那就太好了,但由于StreamReader没有,你就没有什么可做的了。

  • 不要实现那个构造函数。强制用户传入一个流。这样,除非他们有一个有效的流,否则他们不会到达你的构造函数。

  • 接受基本构造函数将抛出的事实,并让用户像您一样处理它。在使用或使用try{} catch{} finally {dispose} 周围添加try{}catch}

  • TextReader继承并实现您需要的功能,并提供一个构造函数来接收适合您用途的字符串