Еще одним преимуществом может быть то, что с помощью HtmlTextWriter можно форматировать код более чистым (более удобным для обслуживания) способом и что HtmlTextWriter автоматически поддерживает кодирование HTML. Для сравнения:
writer.AddAttribute(HtmlTextWriterAttribute.Id, "someId");
if (!string.IsNullOrEmpty(cssClass)) writer.AddAttribute(HtmlTextWriterAttribute.Class, cssClass);
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "Red");
writer.RenderBeginTag(HtmlTextWriterTag.Span);
writer.WriteEncodedText(text);
writer.RenderEndTag();
против
StringBuilder html = new StringBuilder();
html.Append("<span");
html.Append(" id=\"someId\"");
if (!string.IsNullOrEmpty(cssClass)) html.AppendFormat(" class=\"{0}\"", HttpUtility.HtmlAttributeEncode(cssClass));
html.Append(">");
html.Append(HttpUtility.HtmlEncode(text));
html.Append("</span>");
Можно утверждать, что код во втором примере может быть написан другим, возможно, более чистым способом, но это можно рассматривать как преимущество HtmlTextWriter, потому что он в основном обеспечивает один канонический способ форматирования (что снова улучшает обслуживание) .
Редактировать: На самом деле, я действительно допустил ошибку во втором фрагменте, и мне нужно было вернуться и исправить ответ. Это подтверждает то, что я хотел сделать.