我有一个名为gatherSplit的arraylist,它从名为splitMeToDelete的字符串中获取元素,其中包含以下内容:
splitMeToDelete = "Salary, Personal Savings, Pensions, Annuities, Social Security"
字符串像这样拆分成ArrayList:
ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new char[] { ',' }));
当我提供以下代码行时,我应该将IndexOf作为3个instad我得到错误。
gatherSplit.RemoveAt(gatherSplit.IndexOf("Annuities"));
我得到的错误是:
指数超出范围。必须是非负数且小于集合的大小。
我不明白为什么会这样。
答案 0 :(得分:8)
您对IndexOf
的调用返回-1,因为数组中的项目包含“年金”(前导空格)。在每个项目上尝试Trim
以删除空格:
ArrayList gatherSplit = new ArrayList(
splitMeToDelete.Split(new char[] { ',' }).Select(item => item.Trim()).ToArray()
);
(或者更简单,只需在", ".ToCharArray()
上拆分。)
答案 1 :(得分:5)
除了dbaseman指出的内容之外,您可以使用Remove
来实现此目的。
gatherSplit.Remove(" Annuities"); //Note the space if you don't do the trim that dbaseman suggests.
此外,您可以在导致问题的行上设置代码中的断点,并将鼠标悬停在“gatherSplit”上以查看它具有的值,按加号检查对象内部,您将看到额外的空格。 / p>
单击图像中红色圆圈的位置是如何设置断点。
答案 2 :(得分:0)
请检查每个项目之间的空格
而不是上面的字符串尝试使用,
string splitMeToDelete = "Salary,Personal Savings,Pensions,Annuities,Social Security";
答案 3 :(得分:0)
使用以下行。它与空间分裂。它在快照中不可见,但点击“Text Visualizer”查看,它包含空格。
ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries));