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

Trabalhando com coleções

Bom dia!

Meu código não está compilando.

Se eu declaro a Lista de contas dentro do Método Form1_Load, aparece a seguinte mensagem:

Severity Code Description Project File Line Suppression State Error CS1061 'Form1' does not contain a definition for 'contas' and no extension method 'contas' accepting a first argument of type 'Form1' could be found (are you missing a using directive or an assembly reference?) CaixaEletronico C:\Users\jonasbj\Desktop\C#\3__CaixaEletronico-tentativa_List-nao_deu_certo\CaixaEletronico\Form1.cs 69 Active


Se eu declaro fora aparece essa mensagem:

Severity Code Description Project File Line Suppression State Error CS1519 Invalid token '=' in class, struct, or interface member declaration CaixaEletronico C:\Users\jonasbj\Desktop\C#\3__CaixaEletronico-tentativa_List-nao_deu_certo\CaixaEletronico\Form1.cs 23 Active

E essa:

Severity Code Description Project File Line Suppression State Error CS1519 Invalid token '(' in class, struct, or interface member declaration CaixaEletronico C:\Users\jonasbj\Desktop\C#\3__CaixaEletronico-tentativa_List-nao_deu_certo\CaixaEletronico\Form1.cs 23 Active

E essa:

Severity Code Description Project File Line Suppression State Error CS0103 The name 'contas' does not exist in the current context. CaixaEletronico C:\Users\jonasbj\Desktop\C#\3__CaixaEletronico-tentativa_List-nao_deu_certo\CaixaEletronico\Form1.cs 23 Active

7 respostas
using Caelum.CaixaEletronico.Modelo;
using Caelum.CaixaEletronico.Modelo.Contas;
using Caelum.CaixaEletronico.Modelo.Usuarios;
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 System.Collections.Generic;
//using System.Collections.Generic.List;

namespace CaixaEletronico
{
    public partial class Form1 : Form
    {
        private int quantidadeDeContas;

        //var contas = new List<Conta>();
        public contas = new List<Conta>();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //var contas = new List<Conta>();

            Conta contaDoVictor = new ContaCorrente();
            contaDoVictor.Titular = new Cliente();
            contaDoVictor.Titular.Nome = "Victor";
            contaDoVictor.Numero = 1;
            contas.Add(contaDoVictor);

            Conta contaDoGuilherme = new ContaPoupanca();
            contaDoGuilherme.Titular = new Cliente();
            contaDoGuilherme.Titular.Nome = "Guilherme";
            contaDoGuilherme.Numero = 2;
            contas.Add(contaDoGuilherme);

            Conta contaDoMauricio = new ContaInvestimento();
            contaDoMauricio.Titular = new Cliente();
            contaDoMauricio.Titular.Nome = "Mauricio";
            contaDoMauricio.Numero = 3;
            contas.Add(contaDoMauricio);

            this.quantidadeDeContas = contas.Count;

            foreach (var conta in contas)
            {
                comboContas.Items.Add(conta);
                destinoDaTransferencia.Items.Add(conta);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string textoValorSaque = valorOperacao.Text;

            double valorDeposito = Convert.ToDouble(textoValorSaque);

            int indiceSelecionado = comboContas.SelectedIndex;

            Conta contaSelecionada = this.contas[indiceSelecionado];
            contaSelecionada.Deposita(valorDeposito);

            MostraConta(contaSelecionada);
        }

        private void button2_Click(object sender, EventArgs eA)
        {
            string textoValorSaque = valorOperacao.Text;

            double valorSaque = Convert.ToDouble(textoValorSaque);
            Conta contaSelecionada = this.BuscaContaSelecionada();

            try
            { 
                contaSelecionada.Saca(valorSaque);
                MessageBox.Show("Dinheiro Liberado");
            }
            catch (SaldoInsuficienteException e)
            {
                MessageBox.Show("Saldo insuficiente. " + e.Message);
            }
            catch (ArgumentException e)
            {
                MessageBox.Show("Não é possível sacar um valor negativo. " + e.Message);
            }

            this.MostraConta(contaSelecionada);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Conta contaSelecionada = this.BuscaContaSelecionada();

            int indiceDaContaDestino = destinoDaTransferencia.SelectedIndex;

            Conta contaDestino = this.contas[indiceDaContaDestino];

            string textoValor = valorOperacao.Text;
            double valorTransferencia = Convert.ToDouble(textoValor);

            contaSelecionada.TransferePara(contaDestino, valorTransferencia);

            this.MostraConta(contaSelecionada);

        }

        private void button5_Click(object sender, EventArgs e)
        {
            CadastroDeConta formularioDeCadastro = new CadastroDeConta(this);
            formularioDeCadastro.ShowDialog();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Conta conta = BuscaContaSelecionada();
            this.RemoveConta(conta);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string titularSelecionado = comboContas.Text;
            Conta contaSelecionada = this.BuscaContaSelecionada();
            this.MostraConta(contaSelecionada);
        }

        private void testeEquals_click(object sender, EventArgs e)
        {
            Cliente guilherme = new Cliente("Guilherme");
            guilherme.Rg = "12345678-9";

            Cliente paulo = new Cliente("Paulo");
            paulo.Rg = "12345678-9";
            //paulo.Rg = "98765432-1"; teste diferente
            MessageBox.Show(guilherme.ToString() + "\n é igual a \n" + paulo.ToString() + " ? \n\n" + guilherme.Equals(paulo));
        }

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

        private Conta BuscaContaSelecionada()
        {
            int indiceSelecionado = comboContas.SelectedIndex;
            return this.contas[indiceSelecionado];
        }

        public void AdicionaConta(Conta conta)
        {
            this.contas.Add(conta);
            this.quantidadeDeContas++;
            comboContas.Items.Add(conta);
        }

        public void RemoveConta(Conta conta)
        {
            comboContas.Items.Remove(conta);
            this.contas.Remove(conta);
        }
    }
}

Olá Jonas,

note que faltou o tipo da variável contas na hora que você foi declará-la

public contas = new List<Conta>();

Você passou o modificador de acesso public e o nome da variável contas, mas não o tipo dela como sendo List. Além disso, por convenção em geral atributos possuem modificador de acesso private para as outras classes não conseguirem mexer direto nos dados do Form1 e, assim, não vazar o encapsulamento.

Boa tarde Lucas!

Obrigado pela resposta! :-)

A maneira correta seria assim?

public List contas = new List<Conta>();

Eu coloquei assim:

private List contas = new List<Conta>();

E apareceu essa mensagem:

Severity Code Description Project File Line Suppression State Error CS0305 Using the generic type 'List' requires 1 type arguments CaixaEletronico C:\Users\jonasbj\Desktop\C#\3__CaixaEletronico-tentativa_List-nao_deu_certo\CaixaEletronico\Form1.cs 25 Active

solução!

Tem que marcar também que é uma lista de Conta também com o sinal de <>

Funcionou! :-)

Muito obrigado Lucas!