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 に答える