2013-03-25 86 views
3

我是C#的新手,并且我正在尝试编写一段代码。C#在一个字典中使用类作为对象

我不得不做一个简单的程序,存储一些信息的学生和以后,让我得到信息打印。

我的想法是这样的:我创建了一个类,命名为“Aluno”,并实施了一系列的方法来设置和获得我所需要的信息,然后我通过这个类作为参数,以这样的字典的东西:

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; 
     } 

然后我把它用在一个dictionaty

 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

+1

题外话了Object,但你知道,你可以使用'Matriculo'和'NomeCompleto' [属性](HTTP ://msdn.microsoft.com/en-gb/library/x9fsa0sw.aspx),而不是单独的getter和setter方法。 C#不是Java。 – LukeH 2013-03-25 01:32:48

+0

我不是,为小费thnks。 :) – Dib 2013-03-26 16:01:33

回答

5

看起来像你想:

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

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

如果你真的发现自己的object value;而不是具体的类型 - 你可以投它来键入你期望的“价值”为:MyType = (MyType)value;

+0

谢谢,是的,这是我想要的,对新手问题抱歉。 :D – Dib 2013-03-26 16:00:14

2

你需要显式转换,你从字典到你的Aluno类这样((Aluno)chave.Value)

+0

谢谢,帮了很多! :) – Dib 2013-03-26 15:59:28