【发布时间】:2010-10-04 03:10:32
【问题描述】:
我正在编写我的 ASP.NET 服务器控件的 RenderContents() 方法。该方法使用HtmlTextWriter 对象来呈现输出内容。对于我正在编写的控件,使用HtmlTextWriter 的方法似乎需要很多代码行来打开和关闭每个标签并将每个属性添加到流中。最后,我觉得我最终会得到比需要的更长的代码。
我在想,如果我使用 StringBuilder 之类的可链接类,我的代码会更易读、更易编写。
我想知道的是,是否有任何理由使用HtmlTextWriter 对象来呈现我的整个控件的内容?除了安全检查(我假设)之外,它还包括确保您不会以错误的顺序编写标签或创建无效标记,我看不出任何原因。
似乎只做这样的事情会更容易:
protected override void RenderContents(HtmlTextWriter output)
{
StringBuilder s = new StringBuilder();
s.Append("lots")
.Append("of")
.Append("strings");
output.BeginRender();
output.Write(s.ToString());
output.EndRender();
}
有什么理由说明这是个坏主意吗?
更新
回复Mehrdad Afshari的回答:
我没有过多考虑实例化单独的StringBuilder 对象的内存要求。为 HtmlTextWriter 制作一个包装器怎么样,这样它就可以被链接起来,这样就不会产生额外的字符串了。
public class ChainedHtmlTextWriter
{
private HtmlTextWriter _W;
public ChainedHtmlTextWriter(HtmlTextWriter writer)
{
_W = writer;
}
public ChainedHtmlTextWriter Write<T>(T value)
{
_W.Write(value);
return this;
}
public ChainedHtmlTextWriter WriteLine<T>(T value)
{
_W.WriteLine(value);
return this;
}
}
【问题讨论】:
-
也许需要一个更现实的例子
标签: asp.net stringbuilder servercontrols htmltextwriter method-chaining