Durante a aula referente a formulários, utilizei os fontes disponíveis para a aula, sendo que o mesmo lançava uma exceção ao realizar a build;
Assim estava o método:
public override bool Equals(object obj)
{
if(obj != null) {
Conta outra = (Conta)obj; // Exceção aqui
bool numero = (this.Numero == outra.Numero);
bool titular = (this.Titular.Equals(outra.Titular));
return numero && titular;
}
else
{
return false;
}
}
Exceção lançada:
System.InvalidCastException: 'Unable to cast object of type 'System.DBNull' to type 'Caelum.CaixaEletronico.Modelo.Contas.Conta'.'
Entendi que é referente ao Cast que está sendo realizado ali para um tipo diferente de objeto, entretanto não soube como evitar o mesmo, após pesquisar na internet encontrei esse tópico da MSDN em inglês onde deu uma explicação e forma de evitar o lançamento de exceção;
O método equals ficou assim:
public override bool Equals(object obj)
{
if(obj != null) {
// Implementação para evitar a exceção;
if (this.GetType() != obj.GetType())
return false;
Conta outra = (Conta)obj;
bool numero = (this.Numero == outra.Numero);
bool titular = (this.Titular.Equals(outra.Titular));
return numero && titular;
}
else
{
return false;
}
}
A dúvida que ficou é sobre a implementação correta do Equals, sempre vou ter que fazer as duas validações acima? Evitar que o objeto seja nulo e que ele seja do mesmo tipo da classe? Ou isso é uma convenção antiga e hoje é feito de forma diferente?