1

我正在尝试创建一个 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))

所以我的问题是,如果条件对我有效,以便能够比较列表框选择的值和模块名称值的索引,该怎么办?

4

1 回答 1

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))
    ....
于 2013-03-13T23:46:28.133 回答