19

IFormatProvider を StreamWriter に渡すにはどうすればよいですか?

具体的には、
new StreamWriter("myfile.txt", CultureInfo.InvariantCulture);

TextWriter と StringWriter には、コンストラクターにそのためのパラメーターがありますが、StreamWriter にはありません。
プロパティ stringWriter.FormatProvider は読み取り専用です。

悪い解決策のように思える 3 つの回避策を考えることができます。

  • 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 に答える