Pergunta

Trivial eu sei, mas apenas interessado

Eu tenho uma variável stringbuilder, que eu quero voltar o conteúdo, mas se ele está vazio Eu quero voltar "|", por isso é melhor usar stringbuilder.tostring na demonstração comparar por exemplo

   If lReturnStringBuilder.ToString = String.Empty Then
                lReturnStringBuilder.Append("|")
            End If
return lreturnStringBuilder.tostring

ou é melhor para convertê-lo em uma corda, e comparar isso, mesmo que isso signifique que carregam-se uma nova variável e o espaço seqüência de alocação para esse exemplo

Dim lString as string = lReturnStringBuilder.ToString
if lString = string.empty then
      lstring = "|"
end if
return lString
Foi útil?

Solução

Este é o tipo de micro-otimização que você realmente não precisa se preocupar. No entanto, vou postar o que eu acho que é a maneira mais elegante (e eficiente) de fazer isso de qualquer maneira:

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

Isto evita a conversão de um StringBuilder vazia para uma cadeia desnecessariamente (ou então chamar Acrescentar, o que definitivamente não é necessária). Observe o uso da linha If (VB 9.0), o que faz não avaliar ambas as declarações em qualquer um dos casos, uma vez que é um construtor de linguagem e não uma função (exatamente equivalente a um normais Se declaração com atribuições de variáveis).

Outras dicas

Você está alocando o "espaço string", independentemente do que você faz. A função ToString dá-lhe uma corda, se você atribuir o valor a uma variável ou não. Então eu sugiro que você seria melhor fora de atribuir o valor de ToString () a uma variável e, em seguida, testando esse valor variável para uma string vazia. Algo como (desculpe, eu sou um cara C #, mas espero que isso vai funcionar em VB):

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

Você deve evitar chamar ToString na StringBuilder e, em seguida, acrescentar mais a ele. Quando você chamar o método ToString, você começa a string que foi usado internamente pelo StringBuilder. Se você, em seguida, acrescentar mais ao StringBuilder, tem que alocar uma nova string.

Basta usar a propriedade Length para verificar se o StringBuilder está vazio, e se é que você não tem que envolver o StringBuilder para criar o resultado.

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

Você pode usar o Comprimento propriedade de seu objeto StringBuilder. Desta forma, você pode evitar chamar ToString () pela primeira vez:

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

Return lReturnStringBuilder.ToString()

ou

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

Return lReturnStringBuilder.ToString()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top