在QuickStart的一段示例代码中,一个aspx.cs的Page_Load方法中,有如下一段代码:
    StringWriter strWriter = new StringWriter();
    Console.SetOut(strWriter);
    //此处根据业务需要,多次进行 Console.WriteLine 操作
    lblOut.Text = "<pre>" + strWriter.ToString() + "</pre>"; //lblOut是一个Lable的aspx控件我的疑问如下:
    因为StringWriter类中有一个成员StringBuilder _sb,而且Console.WriteLine的字符串都存于_sb中。
    既然如此,为何要在其代码中引入 StringWriter和Console,而不直接通过StringBuilder实现,在最后“lblOut.Text = "<pre>" + strWriter.ToString() + "</pre>"; ”同样实现呢?那样做有什么优势呢?
    谢谢指教!

解决方案 »

  1.   

    楼主先下看MSDN
    Console.SetOut();方法传入参数类型是TextWriter
    TextWriter是一个抽象类:
    System.CodeDom.Compiler.IndentedTextWriter
    System.IO.StreamWriter
    System.IO.StringWriter
    System.Web.HttpWriter
    System.Web.UI.HtmlTextWriter
    StringWriter只是TextWrite的一具体实现.
    如果方法改用了StringBuilder,那么SetOut()就受到很大限制.
      

  2.   

    对不起理解错了楼主的问题,
    StringBuilder 的功能并没有有Console这么丰富.对比两者的输入功能就知道.
      

  3.   

    谢谢两位的回答,但我的意思我根本就不需要 StringWriter和Console,而只要一个StringBuilder不就行了吗?为什么他要弄得挺复杂呢?
      

  4.   

    估计因为Console的SetOut比较灵活
      

  5.   

    我说灵活的意思是:这段代码如果使用在控制台项目中也不用改什么东西。
    也可能他先写的控制台项目例子,然后转移到web上也不一定。没有什么特别的考虑吧。
      

  6.   

    谢谢各位的解答,在http://community.csdn.net/expert/Topicview2.asp?id=4316509我个人觉得基本有答案,所以在这儿就结贴了。
      

  7.   

    不好意思,地址贴错了,是http://community.csdn.net/Expert/TopicView.asp?id=4316538