Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# StreamWriter和IFormatProvider_C#_Filestream_Cultureinfo_Streamwriter_Iformatprovider - Fatal编程技术网

C# StreamWriter和IFormatProvider

C# StreamWriter和IFormatProvider,c#,filestream,cultureinfo,streamwriter,iformatprovider,C#,Filestream,Cultureinfo,Streamwriter,Iformatprovider,如何将IFormatProvider传递给StreamWriter 我特别想创建一个 newstreamwriter(“myfile.txt”,CultureInfo.InvariantCulture) TextWriter和StringWriter在构造函数中有一个参数,但StreamWriter没有。 属性stringWriter.FormatProvider为只读 我可以想出三种似乎不好的解决方案: 更改Thread.CurrentCulture:这将在库中,所以我不想更改任何全局设置,

如何将IFormatProvider传递给StreamWriter

我特别想创建一个
newstreamwriter(“myfile.txt”,CultureInfo.InvariantCulture)

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

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

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

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

您可以创建一个从StreamWriter继承的新类,并重写虚拟FormatProvider属性。

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