琐事我知道,但只是感兴趣
我有一个stringbuilder变量,我想返回它的内容,但是如果它是空的我想返回“|”,那么最好在比较语句中使用stringbuilder.tostring,例如
If lReturnStringBuilder.ToString = String.Empty Then
lReturnStringBuilder.Append("|")
End If
return lreturnStringBuilder.tostring
或者最好将其转换为字符串,并进行比较,即使这意味着加载一个新变量并为其分配字符串空间,例如
Dim lString as string = lReturnStringBuilder.ToString
if lString = string.empty then
lstring = "|"
end if
return lString
答案 0 :(得分:8)
这是一种你真正不需要担心的微优化。但是,无论如何,我会发布我认为最优雅(也是最有效)的方式:
Dim result = If(lReturnString.Length = 0, "|", lReturnString.ToString())
这样可以节省不必要地将空StringBuilder转换为字符串(或者然后调用Append,这绝对不是必需的)。注意使用内联If语句(VB 9.0),它在任何一种情况下都不评估两个语句,因为它是一个语言结构而不是一个函数(完全等同于一个普通的If语句,变量赋值)。
答案 1 :(得分:2)
无论你做什么,都要分配“字符串空间”。无论是否将值赋给变量,ToString函数都会为您提供一个字符串。所以我建议您最好将ToString()的值赋给变量,然后测试该变量值为空字符串。有点像(对不起,我是C#家伙,但希望这可以在VB中使用):
Dim returnVal as String
returnVal = lReturnString.ToString()
If String.IsNullOrEmpty(returnVal) Then
returnVal = "|"
End If
答案 2 :(得分:2)
你应该避免在StringBuilder上调用ToString,然后向它添加更多内容。当您调用ToString方法时,您将获得StringBuilder内部使用的字符串。如果然后将更多内容附加到StringBuilder,则必须分配一个新字符串。
只需使用Length属性检查StringBuilder是否为空,如果是,则不必让StringBuilder参与创建结果。
If lReturnStringBuilder.Length = 0 Then
Return "|"
Else
Return lReturnStringBuilder.ToString()
End If
答案 3 :(得分:1)
您可以使用StringBuilder对象的Length属性。这样你就可以避免第一次调用ToString():
If lReturnStringBuilder.Length = 0 Then
lReturnStringBuilder.Append("|")
End If
Return lReturnStringBuilder.ToString()
或
If lReturnStringBuilder.Length = 0 Then
Return "|"
End If
Return lReturnStringBuilder.ToString()