【问题标题】:C# Using a Class as object in a DictionaryC# 使用类作为字典中的对象
【发布时间】:2013-03-14 10:17:12
【问题描述】:

我是 C# 的新手,我尝试编写的代码存在一些问题。

我必须制作一个简单的程序来存储学生的一些信息,然后让我打印这些信息。

我的想法是这样的:我创建了一个名为“Aluno”的类,并实现了一系列方法来设置和获取我需要的信息,然后我将这个类作为参数传递给 Dictionary 类似这样的东西:

 class Aluno
    {
        private int matricula;
        private string nomeCompleto;

        public int getMatricula() { return matricula; }
        public string getNomeCompleto() { return nomeCompleto;

        public void setMatricula(int m)
        {
            matricula = m;
        }
        public void setNomeCompleto(string nome)
        {
            nomeCompleto = nome;
        } 

然后我把它用在字典里

        Dictionary<int,object> principal =  new Dictionary<int,object>();
        Aluno a = new Aluno();

        Console.WriteLine("Por favor informe a matricula:");
        a.setMatricula(int.Parse(Console.ReadLine()));
        Console.WriteLine("Por favor informe o nome completo do aluno:");
        a.setNomeCompleto(Console.ReadLine().ToUpper());

        principal.Add(a.getMatricula(), a);

在此之后,我实现了一个类来打印存储在字典中的信息:

class ImprimeListagem
    {
        public static void listagemSimples(Dictionary<int,object> origem)
        {
            int contador = 0;

            foreach (KeyValuePair<int, object> chave in origem)
            {
                Console.WriteLine(chave.Key+"|"+chave.Value);

                Console.ReadKey();
            }

        }

当我使用 Visual Studio “查看” chave.value 内部时,存储的所有信息都在那里,但我无法访问它。有人能帮我吗? 我将打印整个代码。

class Program
{
    static void Main(string[] args)
    {
        const int QTDE_ALUNO_PRINCIPAL = 1;
        const int QTDE_ALUNO_RESERVA = 1;            
        int contadorAlunosPrincial = 0;
        int contadorAlunoReserva = 0;


        Dictionary<int,object> principal =  new Dictionary<int,object>();
        Queue<object> espera = new Queue<object>();

        Aluno a = new Aluno();

        int opcao = 0;



        do
        {
            ImprimeMenu.imprimirMenuPrincipal();
            opcao = int.Parse(Console.ReadLine());

            switch (opcao)
            {
                case 1:
                    if (contadorAlunosPrincial < QTDE_ALUNO_PRINCIPAL)
                    {
                        Console.Clear();
                        Console.WriteLine("Por favor informe a matricula:");
                        a.setMatricula(int.Parse(Console.ReadLine()));
                        Console.WriteLine("Por favor informe o nome completo do aluno:");
                        a.setNomeCompleto(Console.ReadLine().ToUpper());
                        Console.WriteLine("Por favor informe o nome da mãe:");
                        a.setNomeDaMae(Console.ReadLine().ToUpper());
                        Console.WriteLine("Por favor informe o nome do pai:");
                        a.setNomeDoPai(Console.ReadLine().ToUpper());
                        Console.WriteLine("Por favor informe o país");
                        a.setEnderecoPais(Console.ReadLine().ToUpper());
                        Console.WriteLine("Por favor informe o estado:");
                        a.setEnderecoEstado(Console.ReadLine().ToUpper());
                        Console.WriteLine("Por favor informe a rua e o numero");
                        a.setEnderecoRuaNumero(Console.ReadLine().ToUpper());
                        Console.WriteLine("Por favor informe o cep");
                        a.setEnderecoCep(Console.ReadLine().ToUpper());
                        Console.WriteLine("Por favor informe o telefone para contato:");
                        a.setTelefoneContato(Console.ReadLine().ToUpper());

                        principal.Add(a.getMatricula(), a);

                        contadorAlunosPrincial++;

                    }
                    else
                        if (contadorAlunoReserva < QTDE_ALUNO_RESERVA)
                        {
                            Console.Clear();
                            Console.WriteLine("Por favor informe a matricula:");
                            a.setMatricula(int.Parse(Console.ReadLine()));
                            Console.WriteLine("Por favor informe o nome completo do aluno:");
                            a.setNomeCompleto(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe o nome da mãe:");
                            a.setNomeDaMae(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe o nome do pai:");
                            a.setNomeDoPai(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe o país");
                            a.setEnderecoPais(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe o estado:");
                            a.setEnderecoEstado(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe a cidade:");
                            a.setEnderecoCidade(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe o bairro:");
                            a.setEnderecoBairro(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe a rua e o numero");
                            a.setEnderecoRuaNumero(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe o cep");
                            a.setEnderecoCep(Console.ReadLine().ToUpper());
                            Console.WriteLine("Por favor informe o telefone para contato:");
                            a.setTelefoneContato(Console.ReadLine().ToUpper());

                            espera.Enqueue(a);

                            contadorAlunoReserva++;
                        }
                        else
                            Console.WriteLine("Não há mais vagas para cadastro de Alunos!\nTente novamente mais tarde.");

                    break;

                case 2:
                    ImprimeMenu.imprimirMenuSecundário();
                    opcao = int.Parse(Console.ReadLine());
                    switch (opcao)
                    {
                        case 1:
                            ImprimeListagem.listagemSimples(principal);
                            break;
                        case 2:
                            break;
                    }
                    break;

            }
        } while (opcao != 7);

    }

    class ImprimeMenu
    {
        public static void imprimirMenuPrincipal()
        {
            Console.Clear();
            Console.WriteLine("Programa de cadastro de alunos! Escolha a opção desejada.\n\n" +
                "1 – Cadastrar aluno\n" +
                "2 – Imprimir lista de alunos\n" +
                "3 – Imprimir lista de espera\n" +
                "4 – Pesquisar aluno\n" +
                "5 – Desistência\n" +
                "6 – Sorteio\n" +
                "7 – Sair");
        }
        public static void imprimirMenuSecundário()
        {
            Console.Clear();
            Console.WriteLine("2 – Imprimir lista de alunos\n\n" +
                "\t1 – Listagem simples\n" +
                "\t2 – Listagem completa");
        }
    }

    class Aluno
    {
        public Aluno()
        {
            matricula = 0;
            nomeCompleto = null;
            nomeDaMae = null;
            nomeDoPai = null;
            enderecoPais = null;
            enderecoEstado = null;
            enderecoCidade = null;
            enderecoBairro = null;
            enderecoRuaNumero = null;
            enderecoCep = null;
            telefoneContato = null; 
        }            

        private int matricula;
        private string nomeCompleto;
        private string nomeDaMae;
        private string nomeDoPai;
        private string enderecoPais;
        private string enderecoEstado;
        private string enderecoCidade;
        private string enderecoBairro;
        private string enderecoRuaNumero;
        private string enderecoCep;
        private string telefoneContato;

        public void setMatricula(int m)
        {
            matricula = m;
        }

        public void setNomeCompleto(string nome)
        {
            nomeCompleto = nome;
        }

        public void setNomeDaMae(string nomeMae)
        {
            nomeDaMae = nomeMae;
        }

        public void setNomeDoPai(string nomePai)
        {
            nomeDoPai = nomePai;
        }

        public void setEnderecoPais(string pais)
        {
            enderecoPais =  pais;
        }

        public void setEnderecoEstado(string estado)
        {
            enderecoEstado = estado;
        }

        public void setEnderecoCidade(string cidade)
        {
            enderecoCidade = cidade;
        }

        public void setEnderecoBairro(string bairro)
        {
            enderecoBairro = bairro;
        }

        public void setEnderecoRuaNumero(string ruaNumero)
        {
            enderecoRuaNumero = ruaNumero;
        }

        public void setEnderecoCep(string cep)
        {
            enderecoCep = cep;
        }

        public void setTelefoneContato(string telefone)
        {
            telefoneContato = telefone;
        }

        public int getMatricula() { return matricula; }
        public string getNomeCompleto() { return nomeCompleto; }
        public string getNomeDaMae() { return nomeDaMae; }
        public string getEnderecoPais() { return enderecoPais; }
        public string getEnderecoEstado() { return enderecoEstado; }
        public string getEnderecoCidade() { return enderecoCidade; }
        public string getEnderecoBairro() { return enderecoBairro; }
        public string getEnderecoRuaNumero() { return enderecoRuaNumero; }
        public string getEnderecoCep() { return enderecoCep; }
        public string getTelefoneContato() { return telefoneContato; }           

    }

    class ImprimeListagem
    {
        public static void listagemSimples(Dictionary<int,object> origem)
        {

            foreach (KeyValuePair<int, object> chave in origem)
            {
                Console.WriteLine(chave.Key+"|"+chave.Value);

                Console.ReadKey();
            }

        }            
    }

在此先感谢并为我糟糕的英语感到抱歉,这不是我的母语。 :D

【问题讨论】:

  • 题外话,但你知道你可以使用MatriculoNomeCompleto properties,而不是单独的getter 和setter 方法。 C# 不是 Java。
  • 我不是,谢谢小费。 :)

标签: c# class object printing dictionary


【解决方案1】:

看起来像你想要的:

Dictionary<int,Aluno> principal =  new Dictionary<int,Aluno>();

一般而言,需要使用object 和泛型类型参数的情况极为罕见。在大多数情况下,您应该使用具体类型(或接口)。

如果您真的发现自己使用object value; 而不是具体类型 - 您可以将其转换为您期望“值”为:MyType = (MyType)value; 的类型。

【讨论】:

  • 谢谢,是的,这就是我想要的,对于新手问题感到抱歉。 :D
【解决方案2】:

您需要将您从 Dictionary 中获得的 Object 显式转换为您的班级 Aluno,就像这样 ((Aluno)chave.Value)

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 2010-10-02
    • 2011-10-09
    • 2021-12-17
    • 1970-01-01
    • 2010-10-12
    • 2012-08-31
    • 2016-05-14
    相关资源
    最近更新 更多