Vb.net 返回Stringbuilder内容
琐碎的我知道,但只是感兴趣 我有一个stringbuilder变量,我想返回它的内容,但是如果它是空的,我想返回“|”,那么最好在比较语句中使用stringbuilder.tostring,例如Vb.net 返回Stringbuilder内容,vb.net,string,stringbuilder,Vb.net,String,Stringbuilder,琐碎的我知道,但只是感兴趣 我有一个stringbuilder变量,我想返回它的内容,但是如果它是空的,我想返回“|”,那么最好在比较语句中使用stringbuilder.tostring,例如 If lReturnStringBuilder.ToString = String.Empty Then lReturnStringBuilder.Append("|") End If return lreturnStringBuilder.
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
无论您做什么,您都在分配“字符串空间”。无论是否将值赋给变量,ToString函数都会为您提供一个字符串。因此,我建议您最好将ToString()的值赋给一个变量,然后测试该变量值是否为空字符串。类似于(抱歉,我是一个C#guy,但希望这能在VB中工作):
这是一种你真的不需要担心的微观优化。然而,无论如何,我将发布我认为最优雅(和有效)的方法:
Dim result = If(lReturnString.Length = 0, "|", lReturnString.ToString())
这样可以避免不必要地将空StringBuilder转换为字符串(或者调用Append,这绝对不是必需的)。请注意内联If语句(VB 9.0)的使用,它在任何一种情况下都不会对两个语句求值,因为它是一种语言构造,而不是一个函数(完全等同于带有变量赋值的普通If语句)。您可以使用StringBuilder对象的属性。这样可以避免第一次调用ToString():
If lReturnStringBuilder.Length = 0 Then
lReturnStringBuilder.Append("|")
End If
Return lReturnStringBuilder.ToString()
或
您应该避免在StringBuilder上调用ToString,然后向其追加更多。调用ToString方法时,您将获得StringBuilder内部使用的字符串。如果随后向StringBuilder追加更多内容,则它必须分配一个新字符串 只需使用Length属性检查StringBuilder是否为空,如果为空,则不必让StringBuilder参与创建结果
If lReturnStringBuilder.Length = 0 Then
Return "|"
Else
Return lReturnStringBuilder.ToString()
End If
我就是这么想的。这就是为什么我看不出问题的原因。干杯,感谢“某种微优化”的评论,只是在玩弄stringbuilder时感兴趣。。。没有意识到你可以在vb.net中使用这样的if语句。。。悲伤的一天,当你了解到一些新的if声明!!!是的,这很公平。VB.NET中的内联If语句是我敢打赌许多程序员都不知道的隐藏特性之一!(旧的IIf或C#等价物更为人所知)当我看到If时,我想问VB是否有一个三元运算符。。。哦!你能澄清一下吗?我正努力想明白这个问题。这是我在C#:string foo=sb.ToString()中的实现方式;返回foo.IsNullOrEmpty()?“|”:foojust String.IsNullOrEmpty()不是字符串。@abatishchev发现得很好。我是呃,在测试您..@abatishchev,并进行了相应的编辑。执行[return sb.Length==0?”|“:sb.ToString()]可以避免您在StringBuilder不包含任何内容时将StringBuilder转换为字符串。
If lReturnStringBuilder.Length = 0 Then
Return "|"
End If
Return lReturnStringBuilder.ToString()
If lReturnStringBuilder.Length = 0 Then
Return "|"
Else
Return lReturnStringBuilder.ToString()
End If