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
答案 0 :(得分:10)
您有SortedList
,但ToolStripMenuItem
未实现IComparable
,因此该列表不知道如何对其进行排序。
如果您不需要对项目进行排序,则可以使用Tuple
或Dictionary
列表,具体取决于您想要做什么。
如果您想对它们进行排序,则需要使用the overload of SortedLists
's constructor that takes IComparer
。这意味着你必须以某种方式实现该接口。
答案 1 :(得分:2)
两种对象类型都实现了IComparable吗?这是排序列表必须比较它添加到数组的对象。