C# 在Combobox中按对象值查找项

C# 在Combobox中按对象值查找项,c#,winforms,combobox,C#,Winforms,Combobox,我有一个组合框,其中填充了Arraylist,如下所示。如果我有同一对象的另一个实例,如何在组合框中选择该对象?请看下面的代码来理解 MakeEntity selectedMake = Make.GetMakeByTitle("Honda"); List<MakeEntity> allMakes = Make.GetAllMakes(); cbVehicleMake.DataSource = allMakes; cbVe

我有一个组合框,其中填充了Arraylist,如下所示。如果我有同一对象的另一个实例,如何在组合框中选择该对象?请看下面的代码来理解

        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的两个不同实例的标识属性相等,则它们将被视为“相等”。看看你的代码,标题可能是一个很好的候选者。短,脆,甜。。。谢谢短、脆、甜。。。谢谢