如何将 IFormatProvider 传递给 StreamWriter?
具体来说,我想创建一个
new StreamWriter("myfile.txt", CultureInfo.InvariantCulture);
TextWriter 和 StringWriter 在构造函数中有一个参数,但 StreamWriter 没有。
属性 stringWriter.FormatProvider 是只读的。
我可以想到三种看似糟糕的解决方案的解决方法:
- 更改 Thread.CurrentCulture:这将在一个库中,所以我宁愿不更改任何全局设置,即使是暂时的。
- 西 南部。WriteLine(InvariantCulture, , ): 有很多sw。WriteLine() 在几个函数上。我真的很想避免惹他们所有人。
- 首先使用 StringWriter,然后将字符串写入文件:由于流可能会变得非常大,这将产生巨大的开销。
有没有办法为 StreamWriter 指定 FormatProvider?基于TextWriter的继承,StreamWriter必须有办法处理这个问题,如果我能设置属性的话。
由于 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;
}
}
}
您可以创建一个从 StreamWriter 继承的新类并覆盖虚拟 FormatProvider 属性。