RenderContents()
ASP.NET サーバー コントロールのメソッドを作成しています。このメソッドは、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
の回答に
応えて:別のオブジェクト
をインスタンス化するためのメモリ要件についてはあまり考えていませんでした。余分な文字列が作成されないようにチェーンできるように、HtmlTextWriter のラッパーを作成するのはどうですか。StringBuilder
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;
}
}