C#窗体正在显示一个额外的对象



因此,我有一个名为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();

相关内容

  • 没有找到相关文章

最新更新