2009-02-21 47 views
2

平凡的我知道,但只是感兴趣返回StringBuilder的内容

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

你能澄清一点吗?我正在努力看到这个问题。这是我如何在C#中做到这一点:string foo = sb.ToString();返回foo.IsNullOrEmpty()? “|” :foo – 2009-02-21 18:25:12

+0

只是String.IsNullOrEmpty()不是字符串。 – abatishchev 2009-02-21 18:26:42

+0

@abatishchev斑点。我是呃,测试你.. – 2009-02-21 18:28:02

回答

8

这是那种你真的只是不需要担心微观优化。不过,我会后我会觉得反正是这样做的最优雅(高效的)方法:调用追加,这是绝对不要求

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

这节省了一个空的StringBuilder转换为字符串不必要的(或再)。注意使用inline If语句(VB 9.0),而不是在任何一种情况下评估两种语句,因为它是一种语言结构而不是函数(完全等同于具有变量赋值的普通If语句)。

2

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

Dim returnVal as String 
returnVal = lReturnString.ToString() 
If String.IsNullOrEmpty(returnVal) Then 
    returnVal = "|" 
End If 
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() 
2

你应该避免呼吁的StringBuilder的ToString然后追加更多的东西。当你调用ToString方法时,你会得到StringBuilder内部使用的字符串。如果你再向StringBuilder附加更多的话,它必须分配一个新的字符串。

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

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