Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 呼叫列表<;T>;。Clear()导致IndexOutOfRangeException_C#_.net_Nhibernate - Fatal编程技术网

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();
    }
}