Возвращает содержимое Stringbuilder
-
05-09-2019 - |
Вопрос
Тривиально, я знаю, но просто интересно
У меня есть переменная 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()