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
¿Fue útil?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top