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

hax*_*mer 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

CommandPrompt, LogScreen /* are */ Form //s
menuCommandPrompt, menuLogScreen /* are */ ToolStripMenuItem //s
Run Code Online (Sandbox Code Playgroud)

错误

svi*_*ick 10

你有一个SortedList,但ToolStripMenuItem没有实现IComparable,所以列表不知道如何排序它们.

如果您不需要对项目进行排序,则可以使用Tuples或a 的列表Dictionary,具体取决于您想要做什么.

如果你想让它们排序,你需要使用的构造函数的重载SortedListsIComparer.这意味着您必须以某种方式实现该接口.