C# 呼叫列表<;T>;。Clear()导致IndexOutOfRangeException
我有一个C# 呼叫列表<;T>;。Clear()导致IndexOutOfRangeException,c#,.net,nhibernate,C#,.net,Nhibernate,我有一个列表,它位于通过NHibernate填充的实体类中。当我在该列表上调用.Clear()时,我得到了一个索引自动失效异常 在调用此函数之前,我已验证该列表中是否有项,但引发了相同的异常 在什么情况下,当您调用此方法时,您希望得到此异常 private readonly List<VacancyTag> _vacancyTags = new List<VacancyTag>(); public virtual void RemoveAllVacancyTags()
列表
,它位于通过NHibernate填充的实体类中。当我在该列表上调用.Clear()
时,我得到了一个索引自动失效异常
在调用此函数之前,我已验证该列表中是否有项,但引发了相同的异常
在什么情况下,当您调用此方法时,您希望得到此异常
private readonly List<VacancyTag> _vacancyTags = new List<VacancyTag>();
public virtual void RemoveAllVacancyTags()
{
_vacancyTags.Clear();
}
private readonly List\u vacancyTags=new List();
公共虚拟无效RemoveAllVacancyTags()
{
_vacancyTags.Clear();
}
编辑:
疯狂的是,即使在抛出异常并破坏调试器之后,我也可以在即时窗口中查询对象,并确认Count()方法返回值5 典型的情况是,多个线程访问同一个列表
如果一个线程在另一个线程清除列表时删除了一个项目,则可能会引发此异常
记住列表
类不是线程安全的。如果您使用的是线程,请锁定方法Clear()
的调用
private readonly object obj=new object();
私有只读列表_vacancyTags=新列表();
公共虚拟无效RemoveAllVacancyTags()
{
锁(obj)
{
_vacancyTags.Clear();
}
}
如果出现多线程问题,可能会出现重复。集合是否引发异常或NHibernate?它不是NHibernate引发异常。通过查看异常属性,没有提到它。谢谢你的回答,但我没有做任何多线程的事情。这是一个bog标准的小型web应用程序,没有做任何花哨的事情。我将实现线程安全列表,只是为了完全排除它并报告!谢谢你的链接。最好尝试使用一个并发集合。
private readonly object obj = new Object();
private readonly List<VacancyTag> _vacancyTags = new List<VacancyTag>();
public virtual void RemoveAllVacancyTags()
{
lock(obj)
{
_vacancyTags.Clear();
}
}