gpt4 book ai didi

C# 在字典中使用类作为对象

转载 作者:行者123 更新时间:2023-11-30 14:13:00 25 4
gpt4 key购买 nike

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

然后我把它用在了字典里

        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

最佳答案

看起来像你想要的:

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

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

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

关于C# 在字典中使用类作为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15606240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com