错误:System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小

时间:2012-12-11 16:03:02

标签: c# .net exception

我得到一个例外“索引超出范围。必须是非负的且小于集合的大小”在下面的代码中。在代码中实际上发生了什么,处理一些重复的值,这是最终占据数据网格

try
         {
            int index = alerts.Find(alertName);
            if (index >= 0 && tblAlarm.Rows.Count > idx)
            {
               DataRow row = tblAlarm.Rows[idx];
               m_dcDuplicates.ReadOnly = false;

            }
         }

我是否需要将int等类型的大小增加到long?或者需要任何额外的代码检查?

1 个答案:

答案 0 :(得分:1)

由于您使用的是lock语句,因此这可能是一个多线程实现。

可能的原因是您无法正确同步对象的访问权限。查看更新集合的任何其他代码(上面代码中的this) - 如果问题不明显,请将其发布。

<强>更新

例如,在更新后的源代码中,索引器的setter未同步:

public Alert this[int index]
{
    get ...
    set
    {
        this.List[index] = value;
    }
}

您可能需要以下内容:

public Alert this[int index]
{
    get ...
    set
    {
        lock(this)
        {    
            this.List[index] = value;
        }
    }
}

代码中的另一个奇怪之处是AddRemove方法引用this.InnerList,而索引器引用this.List