Хорошая реализация слабого словаря в .NET

Где я могу найти хорошую реализацию IDictionary который использует слабые ссылки внутри?

Словарь должен содержать только слабые ссылки на значения и в конечном счете мыться мертвых ссылок.

Или я должен просто записать это сам?

30
задан Konstantin Spirin 6 May 2010 в 20:34
поделиться

1 ответ

Вам придется написать его самостоятельно. Это должно быть относительно просто: реализуйте интерфейс IDictionary, а затем храните фактические значения как WeakReferences. Затем вы можете проверять значения при добавлении/выборе, чтобы убедиться, что они все еще живы.

Псевдокод - на самом деле не компилируется:

public class WeakDictionary <TKey,TValue> : IDictionary<TKey,TValue>
{
    private IDictionary<TKey,WeakReference> _innerDictionary = new Dictionary<TKey,WeakReference>();


    public TValue Index[ TKey key ]
    {
        get{
            var reference = _innerDictionary[ key ];
            if( reference.IsAlive )
                return (TValue)reference.Target;
            throw new InvalidOperation( "Key not found." );
        }

    }

    private void Cull()
    {
        var deadKeys = new List<TKey>();
        foreach( var pair in _innerDictionary )
        {
            if( ! pair.Value.IsAlive )
                deadKeys.Add( pair.Key );
        }

        foreach( var key in deadKeys )
            _innerDictionary.Remove( key );
    }
}
5
ответ дан 28 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

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