我有一个带有调用成员对象方法的方法的复合。每种方法都会吐出一个字符串HTML表单。表单字符串可以变得非常大。我知道我在这里只会处理2个成员对象。简单地连接每个返回值或者我应该在这里使用StringBuilder是否很好?
public override string RenderForm()
{
return _form1.RenderForm() + _form2.RenderForm();
}
答案 0 :(得分:3)
在你只是将两个字符串放在一起的情况下,无论字符串有多长,字符串+运算符(或等效的string.Concat(string,string))就可以了。
如果这是一个大型树结构的一部分,其中许多部分被组装在其他对象中(这似乎意味着这意味着),那么更好的方法可能是将StringBuilder实例传递给每个组件。
public override void RenderForm(StringBuilder result)
{
_form1.RenderForm(result);
_form2.RenderForm(result);
}
....
public override void RenderForm(StringBuilder result)
{
result.Append("<span class='FormName'>");
result.Append(_formName);
result.Append("</span>");
}
这需要修改层次结构中的所有组件,但它可能会改善内存分配。
答案 1 :(得分:1)
您可以使用string.Concat(_form1.RenderForm(), _form2.RenderForm())
虽然我理解C#编译器会将你的代码转换为string.Concat调用。
这个page对不同的方法有很好的性能分析。
答案 2 :(得分:0)
这可能不再有效,但没有提及。
您也可以使用String.Format()
public override string RenderForm()
{
return String.Format("{0}{1}", _form1.RenderForm(), _form2.RenderForm());
}