Возврат содержимого Stringbuilder - PullRequest
2 голосов
/ 21 февраля 2009

Тривиально я знаю, но просто интересно

У меня есть переменная 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 ]

8 голосов
/ 21 февраля 2009

Это тот тип микрооптимизации, о котором вам действительно не нужно беспокоиться. Тем не менее, я опубликую, как мне кажется, самый элегантный (и эффективный) способ сделать это:

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

Это сохраняет преобразование пустого StringBuilder в строку без необходимости (или последующего вызова Append, что определенно не требуется). Обратите внимание на использование встроенного оператора If (VB 9.0), который не оценивает оба оператора в любом случае, так как это языковая конструкция, а не функция (в точности эквивалентная обычному оператору If с переменной назначения).

2 голосов
/ 21 февраля 2009

Вы должны избегать вызова ToString для StringBuilder, а затем добавлять к нему больше. Когда вы вызываете метод ToString, вы получаете строку, которая была использована внутри StringBuilder. Если вы затем добавите больше к StringBuilder, он должен выделить новую строку.

Просто используйте свойство Length, чтобы проверить, является ли StringBuilder пустым, и если это так, вам не нужно привлекать StringBuilder для создания результата.

If lReturnStringBuilder.Length = 0 Then
   Return "|"
Else
   Return lReturnStringBuilder.ToString()
End If
2 голосов
/ 21 февраля 2009

Вы выделяете «строковое пространство» независимо от того, что вы делаете. Функция ToString дает вам строку, независимо от того, назначаете ли вы значение переменной или нет. Поэтому я бы посоветовал вам лучше присвоить значение переменной ToString () и затем проверить значение этой переменной на наличие пустой строки. Что-то вроде (извините, я парень на C #, но, надеюсь, это будет работать в VB):

Dim returnVal as String
returnVal = lReturnString.ToString()
If String.IsNullOrEmpty(returnVal) Then
  returnVal = "|"
End If
1 голос
/ 21 февраля 2009

Вы можете использовать свойство Length вашего объекта StringBuilder. Таким образом, вы можете избежать вызова ToString () в первый раз:

If lReturnStringBuilder.Length = 0 Then
   lReturnStringBuilder.Append("|")
End If

Return lReturnStringBuilder.ToString()

или

If lReturnStringBuilder.Length = 0 Then
   Return "|"
End If

Return lReturnStringBuilder.ToString()
...