ICollection dictionary wrapper
Редактировал(а) Alexandr Fokin 2023/06/30 12:00
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 } |
Можно использовать для EntityFramework | EntityFrameworkCore. Позволяет работать с коллекцией по уникальному ключу, при этом EF будет использовать интерфейс ICollection. |