搜索一个“;id”;保存在列表中以获取所有其他字段
本文关键字:列表 获取 字段 其他 存在 一个 搜索 id 保存 | 更新日期: 2023-09-27 18:26:02
我有一个列表,每个索引都保存一个患者的id、姓名、年龄(…);我目前正在使用这个代码搜索一个:
foreach (Paciente patient in pacientes)
{
if (patient.id == Convert.ToInt32(txtIDP.Text))
{
txtNomeP.Text = patient.nome;
txtIdadeP.Text = Convert.ToString(patient.idade);
txtMoradaP.Text = patient.morada;
txtContatoP.Text = patient.contato;
txtEmailP.Text = patient.email;
break;
}
else
{
txtNome.Clear();
txtIdade.Clear();
txtMorada.Clear();
txtNumero.Clear();
txtEmail.Clear();
MessageBox.Show(
"Não existe nenhum paciente com esse ID!",
"Error!",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
但我知道这是不正确的,因为如果列表存在,它会在列表上搜索,并且在找到id之前会自动显示找不到id的MessageBox。当然,它会将错误显示为数组长度的n倍。我该怎么解决这个问题?非常感谢。
像这样使用LINQ:
Paciente patient = pacientes.FirstOrDefault(x => x.id == Convert.ToInt32(txtIDP.Text));
if (patient == null)
{
txtNome.Clear();
txtIdade.Clear();
txtMorada.Clear();
txtNumero.Clear();
txtEmail.Clear();
MessageBox.Show("Não existe nenhum paciente com esse ID!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
txtNomeP.Text = patient.nome;
txtIdadeP.Text = Convert.ToString(patient.idade);
txtMoradaP.Text = patient.morada;
txtContatoP.Text = patient.contato;
txtEmailP.Text = patient.email;
}
你可以这样做
var found = false;
foreach (Paciente patient in pacientes)
{
if (patient.id == Convert.ToInt32(txtIDP.Text))
{
txtNomeP.Text = patient.nome;
txtIdadeP.Text = Convert.ToString(patient.idade);
txtMoradaP.Text = patient.morada;
txtContatoP.Text = patient.contato;
txtEmailP.Text = patient.email;
found = true;
break;
}
}
if (!found)
{
txtNome.Clear();
txtIdade.Clear();
txtMorada.Clear();
txtNumero.Clear();
txtEmail.Clear();
MessageBox.Show("Não existe nenhum paciente com esse ID!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}