StreamWriter和IFormatProvider

Hug*_*une 18 c# cultureinfo filestream 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必须具有处理此功能的方法.

Lee*_*Lee 23

由于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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)