【问题标题】:Returning Stringbuilder contents返回 Stringbuilder 内容
【发布时间】:2010-10-09 01:53:47
【问题描述】:

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

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

【问题讨论】:

  • 你能澄清一下吗?我很难看到这个问题。这就是我在 C# 中的做法: string foo = sb.ToString();返回 foo.IsNullOrEmpty() ? “|” : 富
  • 只是 String.IsNullOrEmpty() 不是字符串。
  • @abatishchev 很好发现。我是呃,测试你..
  • @abatishchev 已相应编辑。
  • 正在做 [return sb.Length == 0 ? “|” : sb.ToString() ] 当 StringBuilder 不包含任何内容时,您可以避免将 StringBuilder 转换为字符串。

标签: vb.net string stringbuilder


【解决方案1】:

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

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

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

【讨论】:

  • 干杯,欣赏“微优化”评论,只是在摆弄 stringbuilder 时感兴趣......没有意识到你可以在 vb.net 中使用这样的 if 语句......当你了解到关于 if 语句的新东西时,悲伤的一天!!!
  • 是的,这很公平。 VB.NET 中的内联 If 语句是隐藏的特性之一,我敢打赌,许多程序员都不知道! (而较早的 IIf 或 C# 等价物更为人所知。)
  • 看到If的时候正想问VB有没有三元运算符... d'oh!
【解决方案2】:

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

Dim returnVal as String
returnVal = lReturnString.ToString()
If String.IsNullOrEmpty(returnVal) Then
  returnVal = "|"
End If

【讨论】:

  • 这就是我的想法。这就是我看不到问题的原因。
【解决方案3】:

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

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

If lReturnStringBuilder.Length = 0 Then
   Return "|"
Else
   Return lReturnStringBuilder.ToString()
End If

【讨论】:

    【解决方案4】:

    您可以使用 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多