19

如何将 IFormatProvider 传递给 StreamWriter?

具体来说,我想创建一个
new StreamWriter("myfile.txt", CultureInfo.InvariantCulture);

TextWriter 和 StringWriter 在构造函数中有一个参数,但 StreamWriter 没有。
属性 stringWriter.FormatProvider 是只读的。

我可以想到三种看似糟糕的解决方案的解决方法:

  • 更改 Thread.CurrentCulture:这将在一个库中,所以我宁愿不更改任何全局设置,即使是暂时的。
  • sw.WriteLine(InvariantCulture, , ):有很多 sw.WriteLine() 超过几个函数。我真的很想避免与他们所有人搞混。
  • 首先使用 StringWriter 然后将字符串写入文件:由于流可能会变得非常大,这将产生巨大的开销。

有没有办法为 StreamWriter 指定一个 FormatProvider?基于 TextWriter 的继承,如果我可以设置属性,StreamWriter 必须具有处理此问题的方法。

4

2 回答 2

25

由于该FormatProvider属性是虚拟的,因此您可以创建自己的子类,该子类采用IFormatProvider

public class FormattingStreamWriter : StreamWriter
{
    private readonly IFormatProvider formatProvider;

    public FormattingStreamWriter(string path, IFormatProvider formatProvider)
        : base(path)
    {
        this.formatProvider = formatProvider;
    }
    public override IFormatProvider FormatProvider
    {
        get
        {
            return this.formatProvider;
        }
    }
}
于 2012-08-17T19:16:28.090 回答
2

您可以创建一个继承自 StreamWriter 的新类并覆盖虚拟 FormatProvider 属性。

于 2012-08-17T19:16:03.953 回答