我想有条件地将从函数派生的字符串附加到字符串生成器。要求的条件是该函数不返回空字符串(“”)。
有条件附加字符串的目的是避免在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)行代码。
我愿意接受任何其他建议。
创建另一个方法来进行追加,如下所示:
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
像这样的简单重构会缩短您的原始代码,并且意味着您无需重复对函数的返回值进行null或空检查。
对于扩展方法(将此代码放在中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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句