所以我有一个类叫做Person
。每个人可以有一个Name
,Age
和Email
。我有大约50个Person对象存储在名为PersonList
的列表中。我这样定义的:listBox填充对象
List<Person> PersonList = new List<Person>();
的阵列看起来是这样的:我再通过这个
PersonList = {
{
name: 'John',
age: 30,
email: '[email protected]'
},
{
name: 'Bill',
age: 55,
email: '[email protected]'
}
}
循环和增加他们的每一个Name
到一个列表框:
foreach (var Person in PersonList)
{
ListBox.Items.Add(Person.Name);
}
请注意:所有名字都是独一无二的。
我现在想做的事情是,当我在列表框中选择一个名字时,我希望他们的姓名,年龄和电子邮件显示在名为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上做些什么? 注意:我只想将它们的名称添加到列表框中。
你会做什么?
这是更好地使用数据绑定。看看[这个例子](http://stackoverflow.com/a/43699718/3110834)。同样使用'BindingList'会比'List '更好。 –
不太正确的方法。 - 为您的课堂添加ToString覆盖。然后你可以自己添加实例,而不仅仅是名称。你可以将选中的对象转换回Person。 – TaW
你使用的是Windows Forms还是WPF? – Fruchtzwerg