it-swarm-pt.tech

.Trim () quando uma string está vazia ou nula

Estou recebendo alguns dados do cliente na forma de json. Eu estou escrevendo isso:

string TheText; // or whould it be better string TheText = ""; ?
TheText = ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim());

Se a variável que está sendo analisada do json voltar vazia, esse código trava quando eu chamo o método .Trim ()?

Obrigado.

12
frenchie

Se o serializador retornar uma string vazia, Trim não fará nada.

Se o serializador retornar null, você receberá uma NullReferenceException na chamada para Trim.

Seu código seria melhor escrito (no que diz respeito à inicialização) assim:

string theText = 
            ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim());

Não há sentido em declarar e inicializar a variável e imediatamente atribuí-la.

O seguinte seria mais seguro, se você não sabe o que o serializador pode retornar:

string theText = ((serializer.ConvertToType<string>(dictionary["TheText"])));

if(!string.IsNullOrEmpty(theText))
{
    theText = theText.Trim();
}
20
Oded

Chamar Trim() em uma string vazia resultará em uma string vazia. Chamando Trim() on null irá lançar NullReferenceException

12
Armen Tsirunyan

Se você tiver alguns campos que deseja aparar, mas obter exceções para os registros com nulos em determinados campos, a gravação de um método de extensão rápida será o método mais fácil:

public static class ExtensionMethods
    {
        public static string TrimIfNotNull(this string value)
        {
            if (value != null)
            {
                return value.Trim();
            }
            return null;
        }
    }

Exemplo de exemplo de uso:

string concatenated = String.Format("{0} {1} {2}", myObject.fieldOne.TrimIfNotNull(), myObject.fieldTwo.TrimIfNotNull(), myObject.fieldThree.TrimIfNotNull());
9
JsonStatham

Você pode usar o operador elvis:

GetNullableString()?.Trim(); // returns NULL or trimmed string
8
TcKs
  • Não, seria não ser melhor inicializar TheText para "". Você está atribuindo isso logo depois.

  • Não, não vai falhar - Trim() funciona muito bem em uma string vazia. Se por "vazio" você quer dizer que pode ser nulo, então sim, ele irá falhar; você poderia ter null permanecendo nulo com uma chamada condicional nula:

    string TheText =
        serializer.ConvertToType<string>(dictionary["TheText"])?.Trim();
    
4
Ry-

Como sugerido em alguns dos comentários, agora você pode usar operadores n-condicionais c # 6 com esta sintaxe:

string TheText = (serializer.ConvertToType<string>(dictionary["TheText"]))?.Trim();

Documentação: https://msdn.Microsoft.com/pt-br/library/dn986595.aspx

3
shanabus

Algumas técnicas básicas para verificar strings contra null antes de cortar:

  • (mystring ?? "").Trim()
    O "operador de coalescência nulo" ?? retornará o primeiro operando. Somente quando este operando é nulo, o segundo operando será retornado (como um tipo de valor padrão).
    O exemplo acima retornará uma string vazia se mystring for nula.
  • mystring?.Trim()
    O "operador condicional nulo" ? irá abreviar uma cadeia de operações em notação de ponto. Se o operando for nulo, as operações a seguir não serão executadas e o valor nulo será retornado.
    O exemplo acima retornará null se mystring for nulo.
  • if( string.IsNullOrWhiteSpace(mystring) ) { ... }
    o método IsNullOrWhiteSpace() pode substituir o corte se você realmente quiser verificar se existe conteúdo real no mystring. Ele retorna true se o operando for nulo, vazio ou nada além de caracteres em branco.
2
Jpsy

Você pode usar este código como beblow

 string theText = (((serializer.ConvertToType<string>(dictionary["TheText"])))+ string.Empty).Trim();
0
Trần Quốc Triển