KeyedCollection<TKey, TItem> Class

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Provides the abstract base class for a collection whose keys are embedded in the values.

Inheritance Hierarchy

System.Object
  System.Collections.ObjectModel.Collection<TItem>
    System.Collections.ObjectModel.KeyedCollection<TKey, TItem>
      System.Collections.Generic.KeyedByTypeCollection<TItem>
      System.ServiceModel.Description.MessagePartDescriptionCollection

Namespace:  System.Collections.ObjectModel
Assembly:  mscorlib (in mscorlib.dll)

Syntax

'Declaration
<DebuggerDisplayAttribute("Count = {Count}")> _
<DefaultMemberAttribute("Item")> _
<ComVisibleAttribute(False)> _
Public MustInherit Class KeyedCollection(Of TKey, TItem) _
    Inherits Collection(Of TItem)
[DebuggerDisplayAttribute("Count = {Count}")]
[DefaultMemberAttribute("Item")]
[ComVisibleAttribute(false)]
public abstract class KeyedCollection<TKey, TItem> : Collection<TItem>

Type Parameters

  • TKey
    The type of keys in the collection.
  • TItem
    The type of items in the collection.

The KeyedCollection<TKey, TItem> type exposes the following members.

Constructors

  Name Description
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 KeyedCollection<TKey, TItem>() Initializes a new instance of the KeyedCollection<TKey, TItem> class that uses the default equality comparer.
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 KeyedCollection<TKey, TItem>(IEqualityComparer<TKey>) Initializes a new instance of the KeyedCollection<TKey, TItem> class that uses the specified equality comparer.
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 KeyedCollection<TKey, TItem>(IEqualityComparer<TKey>, Int32) Initializes a new instance of the KeyedCollection<TKey, TItem> class that uses the specified equality comparer and creates a lookup dictionary when the specified threshold is exceeded.

Top

Properties

  Name Description
Public propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 Comparer Gets the generic equality comparer that is used to determine equality of keys in the collection.
Public propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 Count Gets the number of elements actually contained in the Collection<T>. (Inherited from Collection<T>.)
Protected propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 Dictionary Gets the lookup dictionary of the KeyedCollection<TKey, TItem>.
Public propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 Item[TKey] Gets the element with the specified key.
Public propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 Item[Int32] Gets or sets the element at the specified index. (Inherited from Collection<T>.)
Protected propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 Items Gets a IList<T> wrapper around the Collection<T>. (Inherited from Collection<T>.)

Top

Methods

  Name Description
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Add Adds an object to the end of the Collection<T>. (Inherited from Collection<T>.)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 ChangeItemKey Changes the key associated with the specified element in the lookup dictionary.
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Clear Removes all elements from the Collection<T>. (Inherited from Collection<T>.)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 ClearItems Removes all elements from the KeyedCollection<TKey, TItem>. (Overrides Collection<T>.ClearItems().)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Contains(T) Determines whether an element is in the Collection<T>. (Inherited from Collection<T>.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Contains(TKey) Determines whether the collection contains an element with the specified key.
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 CopyTo Copies the entire Collection<T> to a compatible one-dimensional Array, starting at the specified index of the target array. (Inherited from Collection<T>.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Finalize Allows an object to try to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (Inherited from Object.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 GetEnumerator Returns an enumerator that iterates through the Collection<T>. (Inherited from Collection<T>.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 GetKeyForItem When implemented in a derived class, extracts the key from the specified element.
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 GetType Gets the Type of the current instance. (Inherited from Object.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 IndexOf Searches for the specified object and returns the zero-based index of the first occurrence within the entire Collection<T>. (Inherited from Collection<T>.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Insert Inserts an element into the Collection<T> at the specified index. (Inherited from Collection<T>.)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 InsertItem Inserts an element into the KeyedCollection<TKey, TItem> at the specified index. (Overrides Collection<T>.InsertItem(Int32, T).)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Remove(T) Removes the first occurrence of a specific object from the Collection<T>. (Inherited from Collection<T>.)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 Remove(TKey) Removes the element with the specified key from the KeyedCollection<TKey, TItem>.
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 RemoveAt Removes the element at the specified index of the Collection<T>. (Inherited from Collection<T>.)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 RemoveItem Removes the element at the specified index of the KeyedCollection<TKey, TItem>. (Overrides Collection<T>.RemoveItem(Int32).)
Protected methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 SetItem Replaces the item at the specified index with the specified item. (Overrides Collection<T>.SetItem(Int32, T).)
Public methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 ToString Returns a string that represents the current object. (Inherited from Object.)

Top

Explicit Interface Implementations

  Name Description
Explicit interface implemetationPrivate methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 ICollection.CopyTo Copies the elements of the ICollection to an Array, starting at a particular Array index. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 ICollection<T>.IsReadOnly Gets a value indicating whether the ICollection<T> is read-only. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 ICollection.IsSynchronized Gets a value indicating whether access to the ICollection is synchronized (thread safe). (Inherited from Collection<T>.)
Explicit interface implemetationPrivate propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 ICollection.SyncRoot Gets an object that can be used to synchronize access to the ICollection. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 IEnumerable.GetEnumerator Returns an enumerator that iterates through a collection. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.Add Adds an item to the IList. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.Contains Determines whether the IList contains a specific value. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.IndexOf Determines the index of a specific item in the IList. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.Insert Inserts an item into the IList at the specified index. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.IsFixedSize Gets a value indicating whether the IList has a fixed size. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.IsReadOnly Gets a value indicating whether the IList is read-only. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate propertySupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.Item Gets or sets the element at the specified index. (Inherited from Collection<T>.)
Explicit interface implemetationPrivate methodSupported by Silverlight for Windows PhoneSupported by Xbox 360 IList.Remove Removes the first occurrence of a specific object from the IList. (Inherited from Collection<T>.)

Top

Remarks

The KeyedCollection<TKey, TItem> class provides both O(1) indexed retrieval and keyed retrieval that approaches O(1). It is an abstract type (MustInherit in Visual Basic), or more accurately an infinite set of abstract types, because each of its constructed generic types is an abstract base class. To use KeyedCollection<TKey, TItem>, derive your collection type from the appropriate constructed type.

The KeyedCollection<TKey, TItem> class is a hybrid between a collection based on the IList<T> generic interface and a collection based on the IDictionary<TKey, TValue> generic interface. Like collections based on the IList<T> generic interface, KeyedCollection<TKey, TItem> is an indexed list of items. Like collections based on the IDictionary<TKey, TValue> generic interface, KeyedCollection<TKey, TItem> has a key associated with each element.

Unlike dictionaries, an element of KeyedCollection<TKey, TItem> is not a key/value pair; instead, the entire element is the value and the key is embedded within the value. For example, an element of a collection derived from KeyedCollection<String,String> (KeyedCollection(Of String, String) in Visual Basic) might be "John Doe Jr." where the value is "John Doe Jr." and the key is "Doe"; or a collection of employee records containing integer keys could be derived from KeyedCollection<int,Employee>. The abstract (MustOverride in Visual Basic) GetKeyForItem method extracts the key from the element.

By default, the KeyedCollection<TKey, TItem> includes a lookup dictionary. When an item is added to the KeyedCollection<TKey, TItem>, the item's key is extracted once and saved in the lookup dictionary for faster searches. This behavior is overridden by specifying a dictionary creation threshold when you create the KeyedCollection<TKey, TItem>. The lookup dictionary is created the first time the number of elements exceeds that threshold. If you specify –1 as the threshold, the lookup dictionary is never created.

NoteNote:

When the internal lookup dictionary is used, it contains references to all the items in the collection if TItem is a reference type, or copies of all the items in the collection if TItem is a value type. Thus, using the lookup dictionary may not be appropriate if TItem is a value type.

Every key in a KeyedCollection<TKey, TItem> must be unique. A key cannot be nulla null reference (Nothing in Visual Basic).

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.