Existe uma implementação concreta geral de um KeyedCollection?

oSystem.Collections.ObjectModel.KeyedCollection classe é uma alternativa muito útil paraSystem.Collections.Generic.Dictionary, especialmente quando os dados da chave fazem parte do objeto que está sendo armazenado ou você deseja enumerar os itens na ordem. Infelizmente, a classe é abstrata e não consigo encontrar uma implementação concreta geral no framework .NET central.

oGuidlines de Design de Framework livro indica que uma implementação concretadevemos ser fornecido para tipos abstratos (seção 4.4 Design de Classe Abstrata). Por que os projetistas de frameworks deixariam de fora uma implementação concreta geral de uma classe tão útil, especialmente quando ela poderia ser fornecida simplesmente expondo um construtor que aceita e armazena umaConversor do item para sua chave:

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

questionAnswers(4)

yourAnswerToTheQuestion