ICollection dictionary wrapper
Версия 1.1 от Alexandr Fokin на 2023/06/30 11:57
public class CollectionDictionaryWrapper<TKey, TValue>
: ICollection<TValue>,
IReadOnlyCollection<TValue>
{
private readonly Func<TValue, TKey> _keySelector;
public IDictionary<TKey, TValue> Data { get; private set; }
public DictionaryWrapperCollection(
IDictionary<TKey, TValue> dict,
Func<TValue, TKey> keySelector
)
{
Data = dict;
_keySelector = keySelector;
}
public DictionaryWrapperCollection(
Func<TValue, TKey> keySelector
)
: this(
new Dictionary<TKey, TValue>(),
keySelector
)
{ }
#region ICollection
public int Count => Data.Count;
public bool IsReadOnly => Data.IsReadOnly;
public void Add(TValue item)
{
Data.Add(_keySelector(item), item);
}
public void Clear()
{
Data.Clear();
}
public bool Contains(TValue item)
{
//Можно сделать проверку по ключу, пока сделаю по KeyValuePair
return Data
.Contains(new KeyValuePair<TKey, TValue>(_keySelector(item), item));
}
public void CopyTo(TValue[] array, int arrayIndex)
{
Data.Values.CopyTo(array, arrayIndex);
}
public IEnumerator<TValue> GetEnumerator()
{
return Data.Values.GetEnumerator();
}
public bool Remove(TValue item)
{
return Data.Remove(_keySelector(item));
}
IEnumerator IEnumerable.GetEnumerator()
{
return Data.Values.GetEnumerator();
}
#endregion
}
: ICollection<TValue>,
IReadOnlyCollection<TValue>
{
private readonly Func<TValue, TKey> _keySelector;
public IDictionary<TKey, TValue> Data { get; private set; }
public DictionaryWrapperCollection(
IDictionary<TKey, TValue> dict,
Func<TValue, TKey> keySelector
)
{
Data = dict;
_keySelector = keySelector;
}
public DictionaryWrapperCollection(
Func<TValue, TKey> keySelector
)
: this(
new Dictionary<TKey, TValue>(),
keySelector
)
{ }
#region ICollection
public int Count => Data.Count;
public bool IsReadOnly => Data.IsReadOnly;
public void Add(TValue item)
{
Data.Add(_keySelector(item), item);
}
public void Clear()
{
Data.Clear();
}
public bool Contains(TValue item)
{
//Можно сделать проверку по ключу, пока сделаю по KeyValuePair
return Data
.Contains(new KeyValuePair<TKey, TValue>(_keySelector(item), item));
}
public void CopyTo(TValue[] array, int arrayIndex)
{
Data.Values.CopyTo(array, arrayIndex);
}
public IEnumerator<TValue> GetEnumerator()
{
return Data.Values.GetEnumerator();
}
public bool Remove(TValue item)
{
return Data.Remove(_keySelector(item));
}
IEnumerator IEnumerable.GetEnumerator()
{
return Data.Values.GetEnumerator();
}
#endregion
}