无法比较数组中的两个元素

时间:2011-09-04 00:59:12

标签: c# arrays

private SortedList<ToolStripMenuItem, Form> forms = new SortedList<ToolStripMenuItem, Form>();                

private void MainForm_Load(object sender, EventArgs e)
{
   formsAdd(menuCommandPrompt, new CommandPrompt());
   formsAdd(menuLogScreen, new LogScreen()); //Error
}

private void formsAdd(ToolStripMenuItem item, Form form)
{
   forms.Add(item, form); //Failed to compare two elements in the array.
   form.Tag = this;
   form.Owner = this;
}

我无法理解它为什么会抛出错误。第二行表单加载事件发生错误。

formsAdd方法只是将form和toolstip元素添加到数组(表单)中,并将表单的标记和所有者设置为此。在第二次调用函数时,它会抛出一个错误。

CommandPrompt, LogScreen /* are */ Form //s
menuCommandPrompt, menuLogScreen /* are */ ToolStripMenuItem //s

Error

2 个答案:

答案 0 :(得分:10)

您有SortedList,但ToolStripMenuItem未实现IComparable,因此该列表不知道如何对其进行排序。

如果您不需要对项目进行排序,则可以使用TupleDictionary列表,具体取决于您想要做什么。

如果您想对它们进行排序,则需要使用the overload of SortedLists's constructor that takes IComparer。这意味着你必须以某种方式实现该接口。

答案 1 :(得分:2)

两种对象类型都实现了IComparable吗?这是排序列表必须比较它添加到数组的对象。