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

Erro na hora de converter obj para Cliente

Olá, a partir da aula passada, fiz o seguinte código:

namespace Caelum.CaixaEletronico.Clientes
{
    class Cliente
    {
        public string Nome { get; set; }
        public string rg;
        public string cpf;
        public string endereco;
        public int idade;
        public bool EEmancipado { get; set; }

        public Cliente(string nome)
        {
            this.Nome = nome;
        }

        public Cliente()
        {

        }

        public bool EhMaiorDeIdade()
        {
            return this.idade >= 18;
        }

        public bool PodeAbrirConta()
        {
            var maiorDeIdade = EhMaiorDeIdade();
            var emancipado = (this.EEmancipado);
            var temCPF = !string.IsNullOrEmpty(this.cpf);

            return (maiorDeIdade || emancipado) && temCPF;
        }

        public override bool Equals(object obj)
        {
            Cliente cliente = (Cliente)obj;
            return this.rg.Equals(cliente.rg);
        }

Porém na hora de executar o código do Form, quando chamo para o botão realizar o Equals, o compilador diz que houve um erro de casting, onde não pude converter um obj para um tipo Cliente.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Caelum.CaixaEletronico.Contas;
using Caelum.CaixaEletronico.Clientes;
using Caelum.CaixaEletronico.Excecoes;

namespace CaixaEletronico
{
    public partial class Form1 : Form
    {
        Conta conta = new Conta();

        public Form1()
        {
            InitializeComponent();
        }

        private void mostraConta(Conta conta)
        {
            textoNumero.Text = Convert.ToString(conta.Numero);
            textoTitular.Text = conta.Titular.Nome;
            textoSaldo.Text = Convert.ToString(conta.Saldo);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            conta.Titular = new Cliente();
            conta.Titular.Nome = "Victor";
            conta.Numero = 1;

            conta.Deposita(500);

            mostraConta(conta);

        }

        private void button1_Click(object sender, EventArgs e)
        {

            string textoValorDoSaque = textoValorSaque.Text;
            double valorDoSaque = Convert.ToDouble(textoValorDoSaque);

            // O try executa o código que PODE pegar uma exceção e o catch faz o tratamento do erro
            try
            {
                conta.Saca(valorDoSaque);
                MessageBox.Show("Dinheiro liberado.");
            }
            catch (SaldoInsuficienteException exception)
            {
                MessageBox.Show("Saldo insuficiente.");
            }
            catch (ArgumentException exception)
            {
                MessageBox.Show("Valor do saque inválido.");
            }

            mostraConta(conta);

        }

        private void button2_Click(object sender, EventArgs e)
        {
            var cliente1 = new Cliente()
            {
                Nome = "Guilherme",
                rg = "123456-7"
            };

            var cliente2 = new Cliente()
            {
                Nome = "Guilherme",
                rg = "123456-7"
            };

            MessageBox.Show("São iguais? " + cliente1.Equals(cliente2.rg));
        }
    }
}

O que fazer para resolver este problema?

2 respostas
solução!

Você deve comparar dois objetos, no seu caso está comparando a propriedade com o objeto. Altere a linha

MessageBox.Show("São iguais? " + cliente1.Equals(cliente2.rg));

para

MessageBox.Show("São iguais? " + cliente1.Equals(cliente2));

Valeu, Everson! Foi uma pequena distração.