Существует ли общая конкретная реализация KeyedCollection?

System.Collections.ObjectModel.KeyedCollection класс является очень полезной альтернативойSystem.Collections.Generic.Dictionaryособенно когда ключевые данные являются частью хранимого объекта или вы хотите иметь возможность перечислять элементы по порядку. К сожалению, класс является абстрактным, и я не могу найти общую конкретную реализацию в базовой среде .NET.

Руководства по проектированию рамок Книга указывает на то, что конкретная реализациядолжен быть предоставлено для абстрактных типов (раздел 4.4 Дизайн абстрактного класса). Почему разработчики фреймворка не учитывают общую конкретную реализацию такого полезного класса, особенно если это можно сделать, просто выставив конструктор, который принимает и сохраняетконвертер от предмета к его ключу:

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

Ответы на вопрос(4)

Ваш ответ на вопрос