Arraylist indexOf返回-1

时间:2012-09-01 07:59:53

标签: c# .net arrays arraylist

我有一个名为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")); 

我得到的错误是:

  

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

我不明白为什么会这样。

4 个答案:

答案 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>

单击图像中红色圆圈的位置是如何设置断点。

Debugging to see the problem

答案 2 :(得分:0)

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

enter image description here

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

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

答案 3 :(得分:0)

使用以下行。它与空间分裂。它在快照中不可见,但点击“Text Visualizer”查看,它包含空格。

ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries));