如果条件将列表框中的选定值与类中的值进行比较

时间:2013-03-13 23:39:49

标签: c# winforms if-statement listboxitem

我正在尝试创建一个if条件,我将所选值与我在另一个类中创建的名称值进行比较。

//我使用以下代码填充列表:

module.Add(new Modules(code, name, semester, preReq, lSlot, tSlot, info));

//我使用以下代码填充列表框:

foreach (object o in module)
        {
            Modules m = (Modules)o;
            selectionBox.Items.Add(m);
            //foreach statement loops for object in module and adds the name to the listbox
        }

//条件是:

if (selectionBox.SelectedItem.Equals(((Modules)selectionBox.Items[i]).mName))

所以我的问题是如果条件对我来说能够比较列表框选择值和模块名称值的索引有什么用呢?

1 个答案:

答案 0 :(得分:1)

selectionBox中的每个项目都是一个Module实例,您无法将整个对象与另一个或同一个类的同一个实例的单个属性进行比较。

尝试划分你的考试

 Modules m = selectionBox.SelectedItem as Modules;
 if(m.nName == (selectionBox.Items[i] as Modules).mName)
     ......

当然,如果您希望将selectedItems的mName属性与选择框中任意[i]项的mName属性进行比较,则会出现这种情况。如果您想要比较对象实例,那么比较应该是

 Modules selected = selectionBox.SelectedItem as Modules;
 Modules aModule = selectionBox.Items[i] as Modules;
 if (selected.Equals(aModule))
    .....

编辑:使用List<Modules>

List<Modules> modulesList = new List<Modules>();
modulesList.Add(new Modules(code, name, semester, preReq, lSlot, tSlot, info));
.....    
foreach(Modules m in modulesList)
{
     // No cast needed here...
     selectionBox.Items.Add(m);
}
.....
// Find an element....
if(modulesList.Contains(m))
    ....