Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 返回Stringbuilder内容_Vb.net_String_Stringbuilder - Fatal编程技术网

Vb.net 返回Stringbuilder内容

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.

琐碎的我知道,但只是感兴趣

我有一个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
无论您做什么,您都在分配“字符串空间”。无论是否将值赋给变量,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