因此,我有一个名为SalesRep的父类和一个称为SeniorSalesRep。我已经得到了它,所以它以多态的方式将两个类显示在列表框中。我遇到的问题是,我有一个组合框,用户可以选择在SalesRep类中显示对象的报告,该报告还应该显示SeniorSalesRep对象,如果只选择了SeniorSalesRep,则只显示SeniorSales Rep对象。然而,当我实现这一点时,它会创建一个名为object的额外对象,该对象只显示SalesRepObjects,而不显示SeniorSalesRep对象。我怎样才能去掉组合框中多余的对象?
public void LoadTypeComboBox()
{
List<string> salesRepTypes = new List<string>();
foreach (SalesRep thisSalesRep in allSalesReps)
{
string s = thisSalesRep.GetType().Name;
string baseType = thisSalesRep.GetType().BaseType.Name;
if (!salesRepTypes.Contains(s))
{
salesRepTypes.Add(s);
}
if (!salesRepTypes.Contains(baseType))
{
salesRepTypes.Add(baseType);
}
}
cboObjectType.DataSource = salesRepTypes;
}
private void cboObjectType_SelectedIndexChanged(object sender, EventArgs e)
{
lstSalesReps.DataSource = null;
lstSalesReps.Items.Clear();
foreach (var i in allSalesReps)
{
if (i.GetType().Name == cboObjectType.SelectedItem.ToString())
{
lstSalesReps.Items.Add(i);
}
else if (i.GetType().BaseType.Name == cboObjectType.SelectedItem.ToString())
{
lstSalesReps.Items.Add(i);
}
}
}
表单输出
在组合框中显示object
的代码如下:
string baseType = thisSalesRep.GetType().BaseType.Name;
SalesRep
的基本类型是object
。您应该从收藏中删除object
,或者一开始就不要添加。
GetType
为您提供对象的运行时类型。所以我认为你不需要.BaseType
。试试这个:
public void LoadTypeComboBox()
{
List<string> salesRepTypes = new List<string>();
foreach (SalesRep thisSalesRep in allSalesReps)
{
string type = thisSalesRep.GetType().Name;
if (!salesRepTypes.Contains(s))
{
salesRepTypes.Add(s);
}
}
cboObjectType.DataSource = salesRepTypes;
}
或者使用Linq:更好
cboObjectType.DataSource = allSalesReps
.Select(r => r.GetType().Name)
.Distinct()
.ToList();