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

ror*_*yok 3 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个错误被抛出了timings.Add(this).将项目添加到列表Index was out of bounds时为什么会抛出?

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

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

Tim*_*Tim 6

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

  • 他可以使用 `ConcurrentBag&lt;TimingObject&gt;` 代替或使用锁对象来使其线程安全。 (2认同)