2

我有一个名为gatherSplit的arraylist,它从一个名为splitMeToDelete的字符串中获取元素,该字符串包含以下内容:

splitMeToDelete = "Salary, Personal Savings, Pensions, Annuities, Social Security"

字符串像这样拆分为 ArrayList:

ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new char[] { ',' }));

当我给出以下代码行时,我应该得到 IndexOf as 3 ,但我得到了错误。

gatherSplit.RemoveAt(gatherSplit.IndexOf("Annuities")); 

我得到的错误是:

指数超出范围。必须是非负数且小于集合的大小。

我不明白为什么会这样。

4

4 回答 4

8

您的调用IndexOf返回 -1,因为数组中的项目包含“Annuities”(前导空格)。尝试Trim每个项目以删除空间:

ArrayList gatherSplit = new ArrayList(
    splitMeToDelete.Split(new char[] { ',' }).Select(item => item.Trim()).ToArray()
);

(或者可能更简单,只需拆分", ".ToCharArray()。)

于 2012-09-01T08:02:09.300 回答
5

除了 dbaseman 指出的内容之外,您还可以使用Remove它。

gatherSplit.Remove(" Annuities"); //Note the space if you don't do the trim that dbaseman suggests.

您也可以在导致问题的行上的代码中设置一个断点并将鼠标悬停在“gatherSplit”上以查看它的值,按加号检查对象内部,您将看到额外的空格。

点击图片中红圈所在的位置就是设置断点的方法。

调试看问题

于 2012-09-01T08:03:51.093 回答
0

使用下面的行。它与空间分裂。它在快照中不可见,但单击“文本可视化器”查看,它包含空间。

ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries));
于 2012-09-01T10:16:12.310 回答
0

请检查每个项目之间的空格

在此处输入图像描述

而不是上面的字符串尝试使用,

string splitMeToDelete = "Salary,Personal Savings,Pensions,Annuities,Social Security";
于 2012-09-01T09:45:26.133 回答