"索引超出了数组的范围"将项添加到通用列表时

时间:2017-02-28 15:05:04

标签: c# arrays indexoutofboundsexception

我只是遇到一个独特的错误,其中一个实时网站正在投掷"索引超出了数组的范围"登录时我将错误追踪到一个旧的"时间"从旧项目继承的文件。这是完整的课程

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

如果列表太大,会发生这种情况吗?它到底有多大?

代码是多余的,已被删除。但我真的很想知道为什么会这样。

1 个答案:

答案 0 :(得分:5)

List<T>不是线程安全的,并且这段代码看起来很可疑,就像你从多个线程中获取List<T>的共享实例一样。我怀疑你是在同时从两个不同的线程中添加到列表中,并抛弃使List工作的数组。