Arraylist indexOf返回-1

Ana*_*and 2 .net c# arrays arraylist

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

splitMeToDelete = "Salary, Personal Savings, Pensions, Annuities, Social Security"
Run Code Online (Sandbox Code Playgroud)

字符串像这样拆分成ArrayList:

ArrayList gatherSplit = new ArrayList(splitMeToDelete.Split(new char[] { ',' }));
Run Code Online (Sandbox Code Playgroud)

当我给出以下代码行时,我应该将IndexOf作为3个instad我得到错误.

gatherSplit.RemoveAt(gatherSplit.IndexOf("Annuities")); 
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

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

我不明白为什么会这样.

McG*_*gle 8

您的调用IndexOf返回-1,因为数组中的项包含"年金"(前导空格).尝试Trim删除每个项目:

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

(或者更容易,只是分开", ".ToCharArray().)

  • 另外,请考虑使用强类型通用List <string>,因为它为您提供了类型安全性. (2认同)

wes*_*ton 5

除了dbaseman指出的,你可以使用Remove它.

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

您还可以在导致问题的行上设置代码中的断点,并将鼠标悬停在"gatherSplit"上以查看它具有的值,按加号检查对象内部,您将看到额外的空格.

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

调试以查看问题