C# 在Combobox中按对象值查找项
我有一个组合框,其中填充了Arraylist,如下所示。如果我有同一对象的另一个实例,如何在组合框中选择该对象?请看下面的代码来理解C# 在Combobox中按对象值查找项,c#,winforms,combobox,C#,Winforms,Combobox,我有一个组合框,其中填充了Arraylist,如下所示。如果我有同一对象的另一个实例,如何在组合框中选择该对象?请看下面的代码来理解 MakeEntity selectedMake = Make.GetMakeByTitle("Honda"); List<MakeEntity> allMakes = Make.GetAllMakes(); cbVehicleMake.DataSource = allMakes; cbVe
MakeEntity selectedMake = Make.GetMakeByTitle("Honda");
List<MakeEntity> allMakes = Make.GetAllMakes();
cbVehicleMake.DataSource = allMakes;
cbVehicleMake.SelectedIndex = cbVehicleMake.Items.IndexOf(selectedMake);
MakeEntity selectedMake=Make.GetMakeByTitle(“本田”);
List allMakes=Make.GetAllMakes();
cbVehicleMake.DataSource=allMakes;
cbVehicleMake.SelectedIndex=cbVehicleMake.Items.IndexOf(selectedMake);
但最后一行并没有按预期工作。我能让它运行吗?还是我走错了方向?是否应该使实体实现iComparable?对于
IndexOf
,您不需要实现iComparable
,只要等于。否则,它将默认为Object.Equals
,只有当两个引用指向同一实例时才匹配。(如果没有查看MakeEntity
的定义,则不确定这是否是问题)
此外,只需使用:
cbVehicleMake.SelectedItem = selectedMake;
这将在内部处理在选项中查找对象的问题
文档:您不需要为IndexOf
实现IComparable
,只要等于。否则,它将默认为Object.Equals
,只有当两个引用指向同一实例时才匹配。(如果没有查看MakeEntity
的定义,则不确定这是否是问题)
此外,只需使用:
cbVehicleMake.SelectedItem = selectedMake;
这将在内部处理在选项中查找对象的问题
文档:假设MakeEntity有一个名为id的属性
cbVehicleMake.SeletedItem=allMakes.Find(q=>q.Id==selectedMake.Id))
假设MakeEntity有一个名为id的属性
cbVehicleMake.SeletedItem=allMakes.Find(q=>q.Id==selectedMake.Id))
它不起作用。原因可能是selectedMake
与allMakes
中存在的对象不同。我应该重写equals
方法吗?是的。重写Equals方法,以便如果MakeEntity的两个不同实例的标识属性相等,则它们将被视为“相等”。看看你的代码,标题可能是一个很好的候选者。它不起作用。原因可能是selectedMake
与allMakes
中存在的对象不同。我应该重写equals
方法吗?是的。重写Equals方法,以便如果MakeEntity的两个不同实例的标识属性相等,则它们将被视为“相等”。看看你的代码,标题可能是一个很好的候选者。短,脆,甜。。。谢谢短、脆、甜。。。谢谢