IOrderedDictionary.Item[Int32] Property  
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Gets or sets the element at the specified index.
public:
 property System::Object ^ default[int] { System::Object ^ get(int index); void set(int index, System::Object ^ value); };public object this[int index] { get; set; }public object? this[int index] { get; set; }member this.Item(int) : obj with get, setDefault Public Property Item(index As Integer) As ObjectParameters
- index
- Int32
The zero-based index of the element to get or set.
Property Value
The element at the specified index.
Exceptions
Examples
The following code example demonstrates the implementation of a simple IOrderedDictionary based on the ArrayList class. The implemented IOrderedDictionary stores first names as the keys and last names as the values, with the added requirement that each first name is unique. This code is part of a larger code example provided for the IOrderedDictionary class.
public class People : IOrderedDictionary
{
    private ArrayList _people;
    public People(int numItems)
    {
        _people = new ArrayList(numItems);
    }
    public int IndexOfKey(object key)
    {
        for (int i = 0; i < _people.Count; i++)
        {
            if (((DictionaryEntry)_people[i]).Key == key)
                return i;
        }
        // key not found, return -1.
        return -1;
    }
    public object this[object key]
    {
        get
        {
            return ((DictionaryEntry)_people[IndexOfKey(key)]).Value;
        }
        set
        {
            _people[IndexOfKey(key)] = new DictionaryEntry(key, value);
        }
    }
    // IOrderedDictionary Members
    public IDictionaryEnumerator GetEnumerator()
    {
        return new PeopleEnum(_people);
    }
    public void Insert(int index, object key, object value)
    {
        if (IndexOfKey(key) != -1)
        {
            throw new ArgumentException("An element with the same key already exists in the collection.");
        }
        _people.Insert(index, new DictionaryEntry(key, value));
    }
    public void RemoveAt(int index)
    {
        _people.RemoveAt(index);
    }
    public object this[int index]
    {
        get
        {
            return ((DictionaryEntry)_people[index]).Value;
        }
        set
        {
            object key = ((DictionaryEntry)_people[index]).Key;
            _people[index] = new DictionaryEntry(key, value);
        }
    }
    // IDictionary Members
    public void Add(object key, object value)
    {
        if (IndexOfKey(key) != -1)
        {
            throw new ArgumentException("An element with the same key already exists in the collection.");
        }
        _people.Add(new DictionaryEntry(key, value));
    }
    public void Clear()
    {
        _people.Clear();
    }
    public bool Contains(object key)
    {
        if (IndexOfKey(key) == -1)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    public bool IsFixedSize
    {
        get
        {
            return false;
        }
    }
    public bool IsReadOnly
    {
        get
        {
            return false;
        }
    }
    public ICollection Keys
    {
        get
        {
            ArrayList KeyCollection = new ArrayList(_people.Count);
            for (int i = 0; i < _people.Count; i++)
            {
                KeyCollection.Add( ((DictionaryEntry)_people[i]).Key );
            }
            return KeyCollection;
        }
    }
    public void Remove(object key)
    {
        _people.RemoveAt(IndexOfKey(key));
    }
    public ICollection Values
    {
        get
        {
            ArrayList ValueCollection = new ArrayList(_people.Count);
            for (int i = 0; i < _people.Count; i++)
            {
                ValueCollection.Add( ((DictionaryEntry)_people[i]).Value );
            }
            return ValueCollection;
        }
    }
    // ICollection Members
    public void CopyTo(Array array, int index)
    {
        _people.CopyTo(array, index);
    }
    public int Count
    {
        get
        {
            return _people.Count;
        }
    }
    public bool IsSynchronized
    {
        get
        {
            return _people.IsSynchronized;
        }
    }
    public object SyncRoot
    {
        get
        {
            return _people.SyncRoot;
        }
    }
    // IEnumerable Members
    IEnumerator IEnumerable.GetEnumerator()
    {
        return new PeopleEnum(_people);
    }
}
public class PeopleEnum : IDictionaryEnumerator
{
    public ArrayList _people;
    // Enumerators are positioned before the first element
    // until the first MoveNext() call.
    int position = -1;
    public PeopleEnum(ArrayList list)
    {
        _people = list;
    }
    public bool MoveNext()
    {
        position++;
        return (position < _people.Count);
    }
    public void Reset()
    {
        position = -1;
    }
    public object Current
    {
        get
        {
            try
            {
                return _people[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
    public DictionaryEntry Entry
    {
        get
        {
            return (DictionaryEntry)Current;
        }
    }
    public object Key
    {
        get
        {
            try
            {
                return ((DictionaryEntry)_people[position]).Key;
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
    public object Value
    {
        get
        {
            try
            {
                return ((DictionaryEntry)_people[position]).Value;
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
}
Public Class People
    Implements IOrderedDictionary
    Private _people As ArrayList
    Public Sub New(ByVal numItems As Integer)
        _people = New ArrayList(numItems)
    End Sub
    Public Function IndexOfKey(ByVal key As Object) As Integer
        Dim i As Integer
        For i = 0 To _people.Count - 1
            If CType(_people(i), DictionaryEntry).Key = key Then
                Return i
            End If
        Next i
        ' key not found, return -1.
        Return -1
    End Function
    ' IOrderedDictionary Members
    Public Function GetEnumerator() As IDictionaryEnumerator _
        Implements IOrderedDictionary.GetEnumerator
        Return New PeopleEnum(_people)
    End Function
    Public Sub Insert(ByVal index As Integer, ByVal key As Object, _
        ByVal value As Object) Implements IOrderedDictionary.Insert
        If Not IndexOfKey(key) = -1 Then
            Throw New ArgumentException("An element with the same key already exists in the collection.")
        End If
        _people.Insert(index, New DictionaryEntry(key, value))
    End Sub
    Public Sub RemoveAt(ByVal index As Integer) _
        Implements IOrderedDictionary.RemoveAt
        _people.RemoveAt(index)
    End Sub
    Public Property Item(ByVal index As Integer) As Object _
        Implements IOrderedDictionary.Item
        Get
            Return CType(_people(index), DictionaryEntry).Value
        End Get
        Set(ByVal value As Object)
            Dim key As Object = CType(_people(index), DictionaryEntry).Key
            _people(index) = New DictionaryEntry(key, value)
        End Set
    End Property
    ' IDictionary Members
    Public Function IDictionaryGetEnumerator() As IDictionaryEnumerator _
    Implements IDictionary.GetEnumerator
        Return New PeopleEnum(_people)
    End Function
    Public Property Item(ByVal key As Object) As Object _
        Implements IDictionary.Item
        Get
            Return CType(_people(IndexOfKey(key)), DictionaryEntry).Value
        End Get
        Set(ByVal value)
            _people(IndexOfKey(key)) = New DictionaryEntry(key, value)
        End Set
    End Property
    Public Sub Add(ByVal key As Object, ByVal value As Object) _
        Implements IDictionary.Add
        If Not IndexOfKey(key) = -1 Then
            Throw New ArgumentException("An element with the same key already exists in the collection.")
        End If
        _people.Add(New DictionaryEntry(key, value))
    End Sub
    Public Sub Clear() Implements IDictionary.Clear
        _people.Clear()
    End Sub
    Public Function Contains(ByVal key As Object) As Boolean _
        Implements IDictionary.Contains
        If IndexOfKey(key) = -1 Then
            Return False
        Else
            Return True
        End If
    End Function
    Public ReadOnly Property IsFixedSize() As Boolean _
        Implements IDictionary.IsFixedSize
        Get
            Return False
        End Get
    End Property
    Public ReadOnly Property IsReadOnly() As Boolean _
        Implements IDictionary.IsReadOnly
        Get
            Return False
        End Get
    End Property
    Public ReadOnly Property Keys() As ICollection _
        Implements IDictionary.Keys
        Get
            Dim KeyCollection As ArrayList = New ArrayList(_people.Count)
            Dim i As Integer
            For i = 0 To _people.Count - 1
                KeyCollection.Add( CType(_people(i), DictionaryEntry).Key )
            Next i
            Return KeyCollection
        End Get
    End Property
    Public Sub Remove(ByVal key As Object) _
        Implements IDictionary.Remove
        _people.RemoveAt(IndexOfKey(key))
    End Sub
    Public ReadOnly Property Values() As ICollection _
        Implements IDictionary.Values
        Get
            Dim ValueCollection As ArrayList = New ArrayList(_people.Count)
            Dim i As Integer
            For i = 0 To _people.Count - 1
                ValueCollection.Add( CType(_people(i), DictionaryEntry).Value )
            Next i
            Return ValueCollection
        End Get
    End Property
    ' ICollection Members
    Public Sub CopyTo(ByVal array As Array, ByVal index As Integer) _
    Implements ICollection.CopyTo
        _people.CopyTo(Array, index)
    End Sub
    Public ReadOnly Property Count() As Integer _
        Implements ICollection.Count
        Get
            Return _people.Count
        End Get
    End Property
    Public ReadOnly Property IsSynchronized() As Boolean _
        Implements ICollection.IsSynchronized
        Get
            Return _people.IsSynchronized
        End Get
    End Property
    Public ReadOnly Property SyncRoot() As Object _
        Implements ICollection.SyncRoot
        Get
            Return _people.SyncRoot
        End Get
    End Property
    ' IEnumerable Members
    Public Function IEnumerableGetEnumerator() As IEnumerator _
        Implements IEnumerable.GetEnumerator
        Return New PeopleEnum(_people)
    End Function
End Class
Public Class PeopleEnum
    Implements IDictionaryEnumerator
    Public _people As ArrayList
    ' Enumerators are positioned before the first element
    ' until the first MoveNext() call.
    Dim position As Integer = -1
    Public Sub New(ByVal list As ArrayList)
        _people = list
    End Sub
    Public Function MoveNext() As Boolean _
        Implements IEnumerator.MoveNext
        position = position + 1
        Return (position < _people.Count)
    End Function
    Public Sub Reset() _
        Implements IEnumerator.Reset
        position = -1
    End Sub
    Public ReadOnly Property Current() As Object _
        Implements IEnumerator.Current
        Get
            Try
                Return _people(position)
            Catch e As IndexOutOfRangeException
                Throw New InvalidOperationException()
            End Try
        End Get
    End Property
    Public ReadOnly Property Entry() As DictionaryEntry _
        Implements IDictionaryEnumerator.Entry
        Get
            Return CType(Current, DictionaryEntry)
        End Get
    End Property
    Public ReadOnly Property Key() As Object _
        Implements IDictionaryEnumerator.Key
        Get
            Try
                Return CType(_people(position), DictionaryEntry).Key
            Catch e As IndexOutOfRangeException
                Throw New InvalidOperationException()
            End Try
        End Get
    End Property
    Public ReadOnly Property Value() As Object _
        Implements IDictionaryEnumerator.Value
        Get
            Try
                Return CType(_people(position), DictionaryEntry).Value
            Catch e As IndexOutOfRangeException
                Throw New InvalidOperationException()
            End Try
        End Get
    End Property
End Class
Remarks
IOrderedDictionary accepts null as a valid value and allows duplicate elements.
The C# language uses the this keyword to define the indexers instead of implementing the Item[] property. Visual Basic implements Item[] as a default property, which provides the same indexing functionality.
This property allows you to access a specific element in the collection by using the following syntax:
obj = myOrderedDictionary[index];
obj = myOrderedDictionary(index)