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 (string) Cast, Convert.ToString( ), Safe Cast, ToString( )
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
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