Diferença entre ToString( ), Convert.ToString( ), (string) Cast, Safe Cast - C# Brasil


Diferença entre ToString( ), Convert.ToString( ), (string) Cast, Safe Cast

{lang: 'pt-BR'}

Há uma diferença simples mas importante entre os quatro…

ToString( ) gera uma exceção se o objeto for nulo.

Assim, nullObject.ToString( ), sendo nullObject nulo, uma NullReferenceException será lançada.

Convert.ToString( ) retorna string.Empty se o objeto for nulo.

(string) cast assina o objeto se ele for nulo.

MyObject o = (string) NullObject;

Mas quando você acessar qualquer propriedade de MyObject, uma NullReferenceException será disparada. Potencialmente uma InvalidCastException também pode ocorrer, pois essa forma de cast explícito não é segura, nessecitando estar em um bloco try/catch.

MyObject o = nullObject as string atribui null ao objeto se o cast for inválido.

No caso acima, se o caso for inválido será atribuído null a MyObject não necessitando do bloco try/catch, essa operação é conhecida como safe cast ( cast seguro).

Uma melhor abordagem seria verificar se o objeto é de um determinado tipo utilizando o operador ‘is’


if ( myObject is string )
{
    myObject = o as string
}

No código acima verificamos se o objeto é de um determinado tipo e se for realizamos o cast.

Referêcias: Manish Pansiniya’s Blog

Acesse também o blog: GabrielDEV

Postado em C# | Marcado como , , ,

2 respostas para “Diferença entre ToString( ), Convert.ToString( ), (string) Cast, Safe Cast”

  1. Sandro disse:

    Bom dia,

    Isso está meio confuso.

    Ex. 1:
    string nome = DataRow["nome"].ToString();

    Se “DataRow["nome"]” for NULL, não gera Exception, o tostring irá retornar um String.Empty.

    Ex. 2:
    string nome = (string)DataRow["nome"];

    Se “DataRow["nome"]” for NULL, irá sim gerar uma Exception.

    []‘s

  2. Gabriel Gomes disse:

    Olá Sandro, desculpe a demora!
    Seu comentário é bem pertinente, no seu exemplo você usa um DataRow["nome"] que eu acredito que venha populado de alguma leitura da base de dados em que o campo na base contenha uma valor nulo, se for esse o caso, note que seu DataRow["nome"] não vem com null e sim com DBNull que no seu método ToString retorna uma string vazia.
    Você pode conferir na documentação.
    http://msdn.microsoft.com/en-us/library/system.dbnull.tostring%28v=vs.71%29.aspx

Deixe uma resposta

Qual a soma da expressão:
4 + 1