Вопрос

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

У меня есть переменная stringbuilder, содержимое которой я хочу вернуть, но если она пуста, я хочу вернуть "|", так что лучше всего использовать stringbuilder.tostring в инструкции compare, например

   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
Это было полезно?

Решение

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

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

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

Другие советы

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

Dim returnVal as String
returnVal = lReturnString.ToString()
If String.IsNullOrEmpty(returnVal) Then
  returnVal = "|"
End If

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

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

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

Вы могли бы использовать Длина свойство вашего объекта 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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top