所以我有一个列表框设置,当你启动程序时,里面有几个库名称,当选择一个时,我这样做是为了获取所选项目的内容。
string selectedItem = lstLibraries.SelectedItem.ToString();
然后我想知道我在arraylist中设置了这个字符串的位置,所以我使用了它。
Libraries tempLibrary = (Libraries)LibrariesAndBooks[index];
正如您在程序达到错误时所见的截图中所见,它位于索引[0]而不是-1为什么会发生这种情况?
screenshot http://image.prntscr.com/image/4f8b31c2bc71419f9eff4cd98f34ef13.png
同样硬编码为0并不是我需要做的选择,如果我犯了一个愚蠢的错误或者我的代码让你想要那么好,因为我只是在大学的第一年并且没有无论出于何种原因,我都会以第6种形式完成任何代码,因此可以预期。
答案 0 :(得分:0)
您正在尝试在Libraries对象的集合中查找字符串,而IndexOf无法执行此操作。您将不得不迭代集合并针对selectedItem测试每个项目的名称,以便自己查找索引。
您甚至可以考虑编写一个可重用的方法,以便更轻松地完成此类任务。类似的东西:
public static int FindIndex(IList collection, Func<object, bool> predicate)
{
for (int i = 0; i < collection.Count; i++)
if (predicate(collection[i]))
return i;
return -1;
}
这样,你可以很容易地解决这个问题:
int index = FindIndex(LibrariesAndBooks, (item) => ((Libraries)item).Name == selectedItem)
更简单,不可重用的方法如下所示:
int index = -1;
for (int i = 0; i < LibrariesAndBooks.Count; i++)
{
// Retrieve & soft cast - if it is a book, candidateLibrary will be null
Libaries candidateLibrary = LibrariesAndBooks[i] as Libraries;
if (candidateLibrary == null)
continue;
if (candidateLibrary.GetName() == selectedItem)
{
index = i;
break;
}
}
祝你好运!