por Cesar Cassiano Schimanco

Diferença entre cast e as - C#

Abaixo vamos ver um exemplo de utilização de as e cast e depois suas diferenças.

//Objeto
object obj = "codebreak";
//cast
string nome = (string)obj;
//as
string nome2 = obj as string;

 

Cast - (string)obj

  • Se a conversão falhar, vai retornar InvalidCastException
  • Se o valor for null vai gerar um NullReferenceException.


As - obj as string;

  • Se a conversão falhar, retorna null.
  • Nunca vai gerar um InvalidCastException.
  • Não pode ser utilizado com tipo de valor não anulável (int, decimal, boolean...), a não ser que seja definido como nullable (int?, decimal?, boolean?...)
/*Erro de Compilação
The as operator must be used with a reference type or nullable type
('int' is a non-nullable value type)*/
int i = (object)1 as int;

//Vai funcionar, pois foi definido como nullable 
int? i = (object)1 as int?;
bool? b = (object)true as bool?;

 

Mais alguns testes.

string nome;
object obj;

obj = "codebreak";
//Resultado: codebreak
nome = (string)obj;

obj = 1;
nome = (string)obj;
//Resultado: System.InvalidCastException

obj = null;
nome = (string)obj;
//Resultado: null

int i = (int)obj;
//Resultado: System.NullReferenceException

obj = "codebreak";
nome = obj as string;
//Resultado: codebreak

obj = 1;
nome = obj as string;
//Resultado: null

obj = null;
nome = obj as string;
//Resultado: null

 

Comentários

Carregando comentários

Postar um novo comentário



Processando...