代码之家  ›  专栏  ›  技术社区  ›  Eric

重定向。NET StreamWriter输出到String变量

  •  41
  • Eric  · 技术社区  · 17 年前

    我想知道是否可以将StreamWriter输出重定向到变量

    有点像

    String^ myString;
    StreamWriter sw = gcnew StreamWriter([somehow specify myString])
    sw->WriteLine("Foo");
    

    那么myString将包含Foo。 我想这样做的原因是重用一个复杂的函数。我可能应该把它重构为一个返回字符串的函数,但知道这一点仍然是一个很好的技巧

    5 回复  |  直到 12 年前
        1
  •  47
  •   Jason Bunting    17 年前

    您可以使用StringWriter将值直接写入字符串生成器对象来实现此操作

    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    // now, the StringWriter instance 'sw' will write to 'sb'
    
        2
  •  32
  •   Matt Ellis    17 年前

    StreamWriter StringWriter 两者都扩展了TextWriter,也许你可以重构使用StreamWriter的方法,转而使用TextWriter,这样它就可以写入流或字符串?

        3
  •  11
  •   erict    8 年前

    你应该能够使用内存流做你需要做的事情。

    MemoryStream mem = new MemoryStream(); 
    StreamWriter sw = new StreamWriter(mem);
    sw.WriteLine("Foo"); 
    // then later you should be able to get your string.
    // this is in c# but I am certain you can do something of the sort in C++
    String result = System.Text.Encoding.UTF8.GetString(mem.ToArray(), 0, (int) mem.Length);
    
        4
  •  8
  •   CloudyMarble    12 年前

    试试这个代码=]

    StringBuilder sb = new StringBuilder();
    StringWriter sw = new StringWriter(sb);
    string s = sb.ToString(); <-- Now it will be a string.
    
        5
  •  0
  •   Rob Prouse    17 年前

    如您所述,重构方法以返回字符串。以你尝试的方式进行黑客攻击,虽然在学术上很有趣,但会使代码变得混乱,并使跟随你的人很难维护。