C#中扩展StringBuilder支持链式方法

发表于:2016-3-14 10:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Darren Ji    来源:51Testing软件测试网采编

#
DoNet
分享:
  本篇体验扩展StringBuilder使之支持链式方法。
  这里有一个根据键值集合生成select元素的方法。
private static string BuilderSelectBox(IDictionary<int, string> options, string id, bool includeUnknown)
{
var html = new StringBuilder();
html.AppendFormat("<select id=\"{0}\" name=\"{0}\">", id);
html.AppendLine();
if(includeUnknown)
{
html.AppendLine("\t<option>Unknown</option>");
}
foreach(var opt in options)
{
html.AppendFormat("\t<option value=\"{0}\">{1}</option>", opt.Key, opt.Value);
html.AppendLine();
}
html.AppendLine("</select>");
return html.ToString();
}
  以上,
  html.AppendFormat("<select id=\"{0}\" name=\"{0}\">", id);
  html.AppendLine();
  可以对这两个语句封装,扩展StringBuilder。
  改成
public static class StringBuilderExtensions
{
public static StringBuilder AppendFormattedLine(this StringBuilder @this, string format, prams object[] args) => @this.AppendFormat(format, args).AppendLine();
}
private static string BuilderSelectBox(IDictionary<int, string> options, string id, bool includeUnknown)
{
var html = new StringBuilder()
.AppendFormattedLine("<select id=\"{0}\" name=\"{0}\">", id);
if(includeUnknown)
{
html.AppendLine("\t<option>Unknown</option>");
}
foreach(var opt in options)
{
html.AppendFormattedLine("\t<option value=\"{0}\">{1}</option>", opt.Key, opt.Value);
html.AppendLine();
}
html.AppendLine("</select>");
return html.ToString();
}
  以上,
  if(includeUnknown)
  {
  html.AppendLine("\t<option>Unknown</option>");
  }
  可以对如上语句进行封装,继续扩展StringBuilder.
public static class StringBuilderExtensions
{
public static StringBuilder AppendFormattedLine(this StringBuilder @this, string format, prams object[] args) => @this.AppendFormat(format, args).AppendLine();
public static StringBuilder AppendLineWhen(this StringBuilder @this, Func<bool> predicate, string value) =>
predicate()
? @this.AppendLine(value)
: @this;
}
private static string BuilderSelectBox(IDictionary<int, string> options, string id, bool includeUnknown)
{
var html = new StringBuilder()
.AppendFormattedLine("<select id=\"{0}\" name=\"{0}\">", id)
.AppendLineWhen(() => includeUnknown, "\t<option>Unknown</option>");
foreach(var opt in options)
{
html.AppendFormattedLine("\t<option value=\"{0}\">{1}</option>", opt.Key, opt.Value);
}
html.AppendLine("</select>");
return html.ToString();
}
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号