我得到一个例外“索引超出范围。必须是非负的且小于集合的大小”在下面的代码中。在代码中实际上发生了什么,处理一些重复的值,这是最终占据数据网格
try
{
int index = alerts.Find(alertName);
if (index >= 0 && tblAlarm.Rows.Count > idx)
{
DataRow row = tblAlarm.Rows[idx];
m_dcDuplicates.ReadOnly = false;
}
}
我是否需要将int
等类型的大小增加到long
?或者需要任何额外的代码检查?
答案 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;
}
}
}
代码中的另一个奇怪之处是Add
和Remove
方法引用this.InnerList
,而索引器引用this.List
。