2

我知道微不足道,但只是感兴趣

我有一个 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
4

4 回答 4

8

这是您真正不需要担心的那种微优化。但是,无论如何,我都会发布我认为最优雅(和最有效)的方式:

Dim result = If(lReturnString.Length = 0, "|", lReturnString.ToString())

这样可以避免将空的 StringBuilder 不必要地转换为字符串(或者然后调用 Append,这绝对不是必需的)。请注意内联 If 语句 (VB 9.0) 的使用,它不会任何一种情况下评估这两个语句,因为它是一种语言构造而不是函数(完全等同于具有变量赋值的普通 If 语句)。

于 2009-02-21T18:22:17.980 回答
2

无论您做什么,您都在分配“字符串空间”。ToString 函数为您提供一个字符串,无论您是否将值分配给变量。所以我建议你最好将 ToString() 的值分配给一个变量,然后测试一个空字符串的变量值。类似的东西(对不起,我是一个 C# 人,但希望这能在 VB 中工作):

Dim returnVal as String
returnVal = lReturnString.ToString()
If String.IsNullOrEmpty(returnVal) Then
  returnVal = "|"
End If
于 2009-02-21T18:20:20.263 回答
2

您应该避免在 StringBuilder 上调用 ToString,然后将更多内容附加到它。当您调用 ToString 方法时,您将获得 StringBuilder 内部使用的字符串。如果您随后将更多内容附加到 StringBuilder,它必须分配一个新字符串。

只需使用 Length 属性来检查 StringBuilder 是否为空,如果是,则不必让 StringBuilder 来创建结果。

If lReturnStringBuilder.Length = 0 Then
   Return "|"
Else
   Return lReturnStringBuilder.ToString()
End If
于 2009-02-21T18:53:33.583 回答
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()
于 2009-02-21T18:36:23.827 回答