我正在尝试以智能方式删除列表框中的项目""。我发现了一个替代我的问题,但我不喜欢它。
我的程序是矩阵计算器。我的所有矩阵都在字典中,我打印"它们位于图形界面的列表框中。
我的选择是删除列表框中的所有项目,删除字典中的选定矩阵,然后重新添加列表框中的所有矩阵。
所以我的问题是我需要找到我要删除的项目的索引并删除它,但var index
总是等于-1
。我寻找解决方案,我发现我需要覆盖方法Equals()
,GetHashCode()
和ToString()
。我想知道是否有更好的解决方案。
public static String Delete ()
{
String matrix = matches[0].Groups[2].ToString();
if (Calculatrice.listMatrix.ContainsKey(matrix))
{
Matrix m = Calculatrice.listMatrix[matrix];
int index = Calculatrice.mainWindow.ListBox_display.Items.IndexOf(m);
Calculatrice.mainWindow.ListBox_display.Items.RemoveAt(index);
Calculatrice.listMatrix.Remove(matrix);
return "Done!\n";
}
throw new Exception("The matrix does not exist.\n");
}
如果您想了解我的正则表达式,可以这样:private static Regex delete_rgx = new Regex(@"^(delete)\((\w+)\)$");
我是StackOverflow社区的新手,我会听取您对我的问题的所有建议,以及如何提出更好的问题,解释等。
答案 0 :(得分:0)
ListBox_display
中的对象可能不是listMatrix
词典中的确切对象。
IndexOf 函数将返回特定对象的索引(就像您想要的那样),但在您的情况下,如果字典中的对象与列表框中的对象不同,则会得到-1。
尝试使用listMatrix.Values