【问题标题】:StreamWriter and IFormatProviderStreamWriter 和 IFormatProvider
【发布时间】:2012-08-14 06:08:52
【问题描述】:

如何将 IFormatProvider 传递给 StreamWriter?

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

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

我可以想到三种看似糟糕的解决方法:

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

有什么方法可以为 StreamWriter 指定一个 FormatProvider 吗?基于从 TextWriter 的继承,如果我可以设置属性,StreamWriter 必须有办法处理这个问题。

【问题讨论】:

    标签: c# filestream cultureinfo streamwriter iformatprovider


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 2013-05-07
        • 2014-02-09
        相关资源
        最近更新 更多