StreamWriter和IFormatProvider

时间:2012-08-17 19:09:26

标签: c# filestream cultureinfo streamwriter iformatprovider

如何将IFormatProvider传递给StreamWriter?

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

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

我可以想到三种似乎不太好的解决方案:

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

有没有办法为StreamWriter指定FormatProvider?基于TextWriter的继承,如果我可以设置属性,StreamWriter必须有办法处理它。

2 个答案:

答案 0 :(得分:22)

由于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;
        }
    }
}

答案 1 :(得分:2)

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