【问题标题】:Arraylist indexOf returns -1Arraylist indexOf 返回 -1
【发布时间】:2012-08-26 21:38:30
【问题描述】:

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

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

字符串像这样拆分成 ArrayList:

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

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

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

我得到的错误是:

索引超出范围。必须为非负数且小于集合的大小。

我不明白为什么会这样。

【问题讨论】:

    标签: c# .net arrays arraylist


    【解决方案1】:

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

    尝试使用上面的字符串代替,

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 谢谢.. 但是它给出了另一个错误,错误 2 参数 1:无法从 'System.Collections.Generic.IEnumerable' 转换为 'System.Collections.ICollection' C:\Users\ hp\Desktop\Dropbox\PE\PE\AddItems.cs 121 55 PE
        • @Anand 抱歉,请参阅我的更新——现在应该修复了。我没有意识到ArrayList 不会在其构造函数中使用IEnumerable(必须先将其转换为数组)。
        • 非常感谢...我注意到了空间。它对我有用。
        • 另外,考虑使用强类型泛型 List,因为它为您提供类型安全。
        • @AlirezaMaddah 对,在这种情况下似乎不需要ArrayList,因为所有项目都是相同的类型。
        【解决方案4】:

        除了 dbaseman 所指出的,您可以使用 Remove 来实现这一点。

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

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

        点击图片中红圈的位置是如何设置断点的。

        【讨论】:

        • 非常感谢...我注意到了空间。
        • 这两个技巧都对我有用 - 你的和 dbaseman。我挣扎了 4 个小时
        猜你喜欢
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        • 2012-01-25
        相关资源
        最近更新 更多