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

подсказка по Производительности:

, Если необходимо связать большие строки, поместите строковые части в массив и используйте Array.Join() метод для получения полной строки. Это может быть много раз быстрее для конкатенации большого количества строк.

нет никакого StringBuilder в JavaScript.

14
задан Kevin Kibler 15 June 2010 в 13:59
поделиться

2 ответа

Существуют конкретные реализации, включая (но не ограничиваясь ими):

В духе вашего вопроса, нет общей реализации, и, поскольку я не работаю в Microsoft, я могу только предполагать. Поскольку конкретная реализация настолько проста, как вы показали, я не буду предлагать никаких предположений (поскольку это, вероятно, было бы неверно).

8
ответ дан 1 December 2019 в 14:44
поделиться

Вот реализация, которую я придумал

public class LookupKeyedCollection<TKey, TItem> : KeyedCollection<TKey, TItem>
{
    private Func<TItem, TKey> _getKeyFunc;

    public LookupKeyedCollection(Func<TItem, TKey> getKeyFunc)
    {
        _getKeyFunc = getKeyFunc;
    }

    //Required KeyedCollection implementation
    protected override TKey GetKeyForItem(TItem item)
    {
        return _getKeyFunc(item);
    }

    public bool TryGetItem(TKey key, out TItem item)
    {
        if (Dictionary == null)
        {
            item = default(TItem);
            return false;
        }

        return Dictionary.TryGetValue(key, out item);
    }

    public void AddOrUpdate(TItem item)
    {
    Remove(_getKeyFunc(item));
    Add(item);
    }

    public new bool Contains(TItem item)
    {
        return base.Contains(_getKeyFunc(item));
    }
}

Обоснование методов можно в основном найти в следующем:

3
ответ дан 1 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: