Is there a general concrete implementation of a KeyedCollection?

Posted by CodeSavvyGeek on Stack Overflow See other posts from Stack Overflow or by CodeSavvyGeek
Published on 2009-12-03T20:23:40Z Indexed on 2010/06/14 13:32 UTC
Read the original article Hit count: 348

Filed under:
|

The System.Collections.ObjectModel.KeyedCollection class is a very useful alternative to System.Collections.Generic.Dictionary, especially when the key data is part of the object being stored or you want to be able to enumerate the items in order. Unfortunately, the class is abstract, and I am unable to find a general concrete implementation in the core .NET framework.

The Framework Design Guidlines book indicates that a concrete implementation should be provided for abstract types (section 4.4 Abstract Class Design). Why would the framework designers leave out a general concrete implementation of such a useful class, especially when it could be provided by simply exposing a constructor that accepts and stores a Converter from the item to its key:

public class ConcreteKeyedCollection : KeyedCollection { private Converter getKeyForItem = null; public GenericKeyedCollection(Converter getKeyForItem) { if (getKeyForItem == null) { throw new ArgumentNullException("getKeyForItem"); } this.getKeyForItem = getKeyForItem; } protected override TKey GetKeyForItem(TItem item) { return this.getKeyForItem(item); } }

© Stack Overflow or respective owner

Related posts about .NET

Related posts about collections