有没有一种方法可以检查 TextWriter 是否关闭?

3
我正在编写一个将数据导出到CSV文件的类,其构造函数需要接受TextWriter。我使用TextWriter而不是StreamWriter是为了使测试更容易:我可以使用相同的构造函数来写入StreamWriter(用于写入文件,预期的用例),也可以写入StringWriter(对于测试非常有用)。
在我的构造函数中,我想对传入的TextWriter执行一些验证。问题是,我似乎无法弄清楚如何检查TextWriter是否已打开或关闭。如果BaseStream属性为空,则StreamWriter可能会出现这种情况。然而,TextWriter没有此属性。是否有其他方法可以检查TextWriter是否打开?

1
我认为你不能在未经授权的情况下访问私有字段,但我也认为这并不重要。对于你的情况来说,访问失败并不是一个非常糟糕的情况,因为在通常情况下,你的类将在初始化后立即被用于编写。 - tia
我正在编写的类不会在初始化后立即写入。该类有一个线程,在后台运行并持续一段时间进行写入,直到被告知停止为止。 - 9a3eedi
1个回答

0
你可以尝试这样做:
if( writer.BaseStream != null)
{
   writer.WriteLine("Writer is open");
}
else
{
   MessageBox.Show ("Writer is closed");
}

例如,如果BaseStreamNULL,则写入器已经被处理。

建议使用using块来处理此问题,因为它会自动处理这个问题。


问题在于TextWriter没有BaseStream属性,这就是我提出这个问题的原因。 - 9a3eedi
1
@9a3eedi:确实。那么我想现在唯一的方法就是使用using块,因为它会在完成后处理所有内容。 - Rahul Tripathi
上面建议的“using”块在您有长时间运行和大量代码时并不是非常可靠的。要直接处理该类型,请在try/catch块中调用其Dispose方法。 - Su Llewellyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接