检查是StringBuilder()AppendLine()是一个空字符串

时间:2014-11-12 08:59:05

标签: vb.net winforms visual-studio append stringbuilder

我想有条件地将从函数派生的字符串附加到字符串构建器。所需条件是函数不返回空字符串("")。

有条件地附加字符串的目的是避免AppendLine()在追加的字符串(从函数返回)为空时追加一行。

我当前的代码(将函数包装在调用相同函数的条件中):

Dim builder As New System.Text.StringBuilder()

builder.Append("Some text...").AppendLine()

If Not IsNothing(someFunction(someParameterAA, someParameterAB)) Then
    builder.Append(someFunction(someParameterAA, someParameterAB)).AppendLine()
End If

If Not IsNothing(someFunction(someParameterBA, someParameterBB)) Then
    builder.Append(someFunction(someParameterBA, someParameterBB)).AppendLine()
End If
builder.AppendLine().Append("...some text.")

Dim s As String = builder.ToString
MessageBox.Show(s)

我希望存在一种更有效的替代方案(在编写代码量方面效率很高)。最后,我想避免两次调用相同的函数,但是我无法独立地将builder.Append代码行添加到我的函数中。是否可以定位builder.Append

潜在逻辑的例子:

If `builder.Append()` inside the following brackets is not an empty string then:
(
builder.Append(someFunction(someParameterAA, someParameterAB)).AppendLine()
)

如果有人对上述方法有解决方案,请记住builder.Append()行之外的简洁(=< 2)代码行的先决条件。

我可以接受任何其他建议。

2 个答案:

答案 0 :(得分:3)

创建另一种方法来执行追加:

CheckBeforeAppend(someFunction(someParameterAA, someParameterAB), builder)
CheckBeforeAppend(someFunction(someParameterBA, someParameterBB), builder)
....
Public Sub CheckBeforeAppend(s As String, sb As StringBuilder)

  If Not String.IsNullOrEmpty(s)
    sb.Append(s).AppendLine()
  End If

End Sub

这样的简单重构缩短了原始代码,意味着您不需要复制函数返回值的空或空检查。

对于扩展方法(将此代码放在Module中):

<Extension()>
Public Sub CheckBeforeAppend(s As String, sb As StringBuilder)

  If Not String.IsNullOrEmpty(s)
    sb.Append(s).AppendLine()
  End If

End Sub

用法:

someFunction(someParameterAA, someParameterAB).CheckBeforeAppend(sb)

StringBuilder上的扩展程序:

<Extension()>
Public Sub CheckBeforeAppend(sb As StringBuilder, s As String)

  If Not String.IsNullOrEmpty(s)
    sb.Append(s).AppendLine()
  End If

End Sub

用法:

builder.CheckBeforeAppend(someFunction(someParameterAA, someParameterAB))

答案 1 :(得分:2)

您可以通过将函数的结果存储在变量中来避免调用该函数。

Dim myString As String = someFunction(someParameterAA, someParameterAB)
If myString <> "" Then
    builder.Append(myString).AppendLine()
End If

myString = someFunction(someParameterBA, someParameterBB)
If myString <> "" Then
    builder.Append(myString).AppendLine()
End If

这样你只需调用一次函数并用变量检查你的条件。此外,代码看起来更小,更容易理解。