所以我有一个名为Person
的班级。每个人都可以拥有Name
,Age
和Email
。我将大约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。
你会做什么?
答案 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;
}