搜索一个“;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倍。我该怎么解决这个问题?非常感谢。

搜索一个“;id”;保存在列表中以获取所有其他字段

像这样使用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);
}