Переменная _version в библиотченом классе ArrayList

Vasya Milovidov

Изучаю библиотечный класс ArrayList и не могу понять какую функцию несет переменная private int _version; ? Строка 48:

https://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs,48

public class ArrayList : IList, ICloneable
{
    private Object[] _items;
    [ContractPublicPropertyName("Count")]
    private int _size;
    private int _version;
    [NonSerialized]
    private Object _syncRoot;

    private const int _defaultCapacity = 4;
    private static readonly Object[] emptyArray = EmptyArray<object>.Value; 

    // Note: this constructor is a bogus constructor that does nothing
    // and is for use only with SyncArrayList.
    internal ArrayList( bool trash )
    {
    }

    // Constructs a ArrayList. The list is initially empty and has a capacity
    // of zero. Upon adding the first element to the list the capacity is
    // increased to _defaultCapacity, and then increased in multiples of two as required.
    public ArrayList() {
        _items = emptyArray;  
    }
</object>
1 ответ

Vasya Milovidov

Переменная _version служит для отслеживания модификации списка. Перечислитель списка отслеживает изменение версии и выбрасывает исключение, если список был изменён во время перечисления:

// Implements an enumerator for a ArrayList. The enumerator uses the
// internal version number of the list to ensure that no modifications are
// made to the list while an enumeration is in progress.

licensed under cc by-sa 3.0 with attribution.