Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvidas sobre exercícios no Curso C# III - Aula 04

Eu estou usando o programa Visual Studio Community 2017 para fazer os exercícios sobre caixa eletrônico, porém quando eu rodo os arquivos disponibilizados pelo site, eu tenho recebido dois erros referentes a função que rescreve Equals.

O primeiro é que a função Equals não sobreescreve a função Object.GetHashCode(). Eu consego corrigir isto com:

public override int GetHashCode() {
    return base.GetHashCode();
}

Porém não acho que esteja de corrigindo de forma certa.

O segundo problema é: System.InvalidCastException: 'Unable to cast object of type 'System.DBNull' to type 'Caelum.CaixaEletrônico.Modelo.Contas.Conta'.'

public override bool Equals(object obj) {
    if (obj != null) {
        Conta c = (Conta) obj;
        bool numero= (this.Numero == c.Numero);
        bool titular = (this.Titular.Equals(c.Titular));
        return (numero && titular);
    } else {
        return false;
    }
}
3 respostas
solução!

Oi Pedro, tudo bom?

Quanto ao hash, estamos apenas pegando o hash de Object, não acredito que seja um problema.

Já em relação ao método Equals, parece que está sendo passado System.DBNull ao invés do Null que a gente esperava. Essa classe representa um valor não existente no banco.

Pode ser que a versão do Visual Studio influencie nisso. Mas, precisariamos dar uma olhada no código todo pra ter certeza.

De qualquer forma, você pode preparar seu método equals para lidar com essa possibilidade também. Algo como:

public override bool Equals(object obj) {
    if (obj != null && obj.GetType() != typeof(System.DBNull)) {
        Conta c = (Conta) obj;
        bool numero= (this.Numero == c.Numero);
        bool titular = (this.Titular.Equals(c.Titular));
        return (numero && titular);
    } else {
        return false;
    }
}

Pois então, eu sei que não é necessário o código do GetHashCode, mas o Visual Studio avisa que é preciso sobrescrever, e o fato do editor avisar que tem algo errado me incomoda.

Já sobre o DBNull no Equals o seu método resolve o erro.

André, muito obrigado pela ajuda .

Pedro, boa noite,

Só fazendo uma pequena correção: Esse assunto é abordado na Aula 03 do Curso de C# III - Atividades 01 a 03, na Aula 04, Mão na Massa - Formulários é tradado sobre o cadastro de novas contas em um formulário diferente do principal.

Eu também tive esse erro apresentado no Visual Studio 2017 Community na Aula 03. Cheguei ao seu post pois estou com problemas na Aula 04.

Gostei da solução do André Chaves.