listBox填充了对象

时间:2017-05-06 20:24:37

标签: c# arrays winforms list object

所以我有一个名为Person的班级。每个人都可以拥有NameAgeEmail。我将大约50个Person对象存储在名为PersonList的列表中。我这样定义:

List<Person> PersonList = new List<Person>();

数组看起来像这样:

PersonList = {
    { 
        name: 'John',
        age: 30,
        email: 'John@email.com'
    },
    { 
        name: 'Bill',
        age: 55,
        email: 'Bill@email.com'
    }
}

然后我循环遍历它并将每个Name添加到ListBox:

foreach (var Person in PersonList)
{
    ListBox.Items.Add(Person.Name);
}

请注意:所有名称都是唯一的。

我现在要做的是,当我在ListBox中选择一个名字时,我希望他们的姓名,年龄和电子邮件显示在名为Label1的标签中。目前,我通过循环遍历PersonList并检查与所选ListBox项目文本匹配的名称来实现此目的。

private void ListBox_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (var Person in PersonList)
    {
        if (Person.Name == ListBox.SelectedItem.ToString())
        {
            Label1.Text = "Name: " + Person.Name + Environment.NewLine +
                          "Age: " + Person.Age + Environment.NewLine +
                          "Email: " + Person.Email;
        }
    }
}

它有效,但这是正确的做法吗?我觉得不断循环遍历PersonList来比较名称可能对性能不利。如果PersonList包含数千个对象怎么办?

我也想知道是否有更好的方法将所有Person.Name插入到ListBox中?或者循环的方式去?我知道AddRange,但我能以某种方式在Person.Name上做到这一点吗? 注意:我只想将其名称添加到ListBox。

你会做什么?

1 个答案:

答案 0 :(得分:2)

您可以直接使用列表填充列表框,并且可以通过3种方式选择项目,请参阅代码:

  public class Pessoa
    {
        public string Nome { get; set; }
        public string Email { get; set; }

        public override string ToString()
        {
            return this.Nome.ToString();
        }

    }
    List<Pessoa> lista = new List<Pessoa>();
    private void Form1_Load(object sender, EventArgs e)
    {
        lista.Add(new Pessoa() { Nome = "Rovann1", Email = "Teste1@Teste.com" });
        lista.Add(new Pessoa() { Nome = "Rovann2", Email = "Teste2@Teste.com" });           
        lista.Add(new Pessoa() { Nome = "Rovann3", Email = "Teste3@Teste.com" });

        listBox1.DisplayMember = "Nome";
        listBox1.DataSource = lista;


    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        label1.Text = "Select one item";


        //1

        if (listBox1.SelectedItem != null)
        {
            label1.Text = ((Pessoa)listBox1.SelectedItem).Email;
        }

        //2

        Pessoa p = lista.Find(x => x.Nome == listBox1.SelectedItem.ToString());
        if (p != null)
            label1.Text = p.Email;


        //3

        if (listBox1.SelectedIndex >= 0)
            label1.Text = lista[listBox1.SelectedIndex].Email;

    }