我只是遇到一个独特的错误,其中一个实时网站正在投掷"索引超出了数组的范围"登录时我将错误追踪到一个旧的"时间"从旧项目继承的文件。这是完整的课程
public class TimingObject
{
public DateTime timestamp { get; set; }
public String call { get; set; }
public TimeSpan duration { get; set; }
// create a new timing object starting now
public TimingObject()
{
timestamp = DateTime.Now;
}
public TimingObject(String call)
{
timestamp = DateTime.Now;
this.call = call;
}
public void Stop()
{
List<TimingObject> timings;
if (HttpContextManager.Current.Cache["PageTimings"] == null)
timings = new List<TimingObject>();
else
timings = HttpContextManager.Current.Cache["PageTimings"] as List<TimingObject>;
this.duration = (DateTime.Now - this.timestamp);
timings.Add(this);
HttpContextManager.Current.Cache["PageTimings"] = timings;
}
}
timings.Add(this)
引发了错误。当将项添加到列表中时,为什么会抛出Index was out of bounds
?
如果列表太大,会发生这种情况吗?它到底有多大?
代码是多余的,已被删除。但我真的很想知道为什么会这样。
答案 0 :(得分:5)
List<T>
不是线程安全的,并且这段代码看起来很可疑,就像你从多个线程中获取List<T>
的共享实例一样。我怀疑你是在同时从两个不同的线程中添加到列表中,并抛弃使List
工作的数组。