Volviendo contenidos StringBuilder
-
05-09-2019 - |
Pregunta
Trivial lo sé, pero simplemente está interesado
Tengo una variable StringBuilder, que quiero devolver el contenido de, pero si está vacío quiero volver "|", por lo que es mejor usar stringbuilder.tostring en la cuenta de comparar por ejemplo
If lReturnStringBuilder.ToString = String.Empty Then
lReturnStringBuilder.Append("|")
End If
return lreturnStringBuilder.tostring
o es lo mejor para convertirlo en una cadena, y comparar que, a pesar de que los medios de carga de una nueva variable y la asignación de espacio de cadena para que por ejemplo
Dim lString as string = lReturnStringBuilder.ToString
if lString = string.empty then
lstring = "|"
end if
return lString
Solución
Este es el tipo de micro-optimización que lo que realmente no es necesario preocuparse. Sin embargo, voy a publicar lo que yo creo que es la forma más elegante (y eficiente) de hacer esto de todos modos:
Dim result = If(lReturnString.Length = 0, "|", lReturnString.ToString())
Se evita así la conversión de un StringBuilder vacío a una cadena innecesariamente (o luego llamar Anexar, lo que definitivamente no es necesario). Observe el uso de la línea Cuando la declaración (VB 9.0), lo que hace no evaluar ambas declaraciones en cualquier caso, ya que es una construcción del lenguaje y no una función (exactamente equivalente a una normal Si comunicado con asignaciones de variables).
Otros consejos
Se está asignando el "espacio de cadena", independientemente de lo que haces. La función ToString le da una cadena, si se asigna el valor a una variable o no. Así que yo sugeriría que estaría mejor fuera de la asignación del valor de ToString () a una variable y luego las pruebas de que valor de la variable de una cadena vacía. Algo así como (lo siento, yo soy un chico de C #, pero espero que esto funcionará en VB):
Dim returnVal as String
returnVal = lReturnString.ToString()
If String.IsNullOrEmpty(returnVal) Then
returnVal = "|"
End If
Usted debe evitar llamar ToString en la StringBuilder y luego agregar más a él. Cuando se llama al método ToString, se obtiene la cadena que se utiliza internamente por el StringBuilder. Si a continuación, anexar más a la StringBuilder, tiene que asignar una nueva cadena.
Sólo tiene que utilizar la propiedad length para comprobar si el StringBuilder está vacía, y si es que no tiene que implicar el StringBuilder para crear el resultado.
If lReturnStringBuilder.Length = 0 Then
Return "|"
Else
Return lReturnStringBuilder.ToString()
End If
Se puede utilizar el Longitud propiedad de su objeto StringBuilder. De esta manera se puede evitar llamar ToString () la primera vez:
If lReturnStringBuilder.Length = 0 Then
lReturnStringBuilder.Append("|")
End If
Return lReturnStringBuilder.ToString()
o
If lReturnStringBuilder.Length = 0 Then
Return "|"
End If
Return lReturnStringBuilder.ToString()