Исходный код вики ICollection dictionary wrapper

Редактировал(а) Alexandr Fokin 2023/06/30 12:00

Последние авторы
1
2
3 |{{code language="c#"}}public class CollectionDictionaryWrapper<TKey, TValue>
4 : ICollection<TValue>,
5 IReadOnlyCollection<TValue>
6 {
7 private readonly Func<TValue, TKey> _keySelector;
8 public IDictionary<TKey, TValue> Data { get; private set; }
9
10
11 public DictionaryWrapperCollection(
12 IDictionary<TKey, TValue> dict,
13 Func<TValue, TKey> keySelector
14 )
15 {
16 Data = dict;
17 _keySelector = keySelector;
18 }
19
20 public DictionaryWrapperCollection(
21 Func<TValue, TKey> keySelector
22 )
23 : this(
24 new Dictionary<TKey, TValue>(),
25 keySelector
26 )
27 { }
28
29
30 #region ICollection
31
32 public int Count => Data.Count;
33
34 public bool IsReadOnly => Data.IsReadOnly;
35
36 public void Add(TValue item)
37 {
38 Data.Add(_keySelector(item), item);
39 }
40
41 public void Clear()
42 {
43 Data.Clear();
44 }
45
46 public bool Contains(TValue item)
47 {
48 //Можно сделать проверку по ключу, пока сделаю по KeyValuePair
49
50 return Data
51 .Contains(new KeyValuePair<TKey, TValue>(_keySelector(item), item));
52 }
53
54 public void CopyTo(TValue[] array, int arrayIndex)
55 {
56 Data.Values.CopyTo(array, arrayIndex);
57 }
58
59 public IEnumerator<TValue> GetEnumerator()
60 {
61 return Data.Values.GetEnumerator();
62 }
63
64 public bool Remove(TValue item)
65 {
66 return Data.Remove(_keySelector(item));
67 }
68
69 IEnumerator IEnumerable.GetEnumerator()
70 {
71 return Data.Values.GetEnumerator();
72 }
73
74 #endregion
75 }{{/code}}
76 |Можно использовать для [[EntityFramework ~~| EntityFrameworkCore>>doc:Разработка.NET.Работа с БД.EntityFramework | EntityFrameworkCore.WebHome]].
77 Позволяет работать с коллекцией по уникальному ключу, при этом EF будет использовать интерфейс ICollection.
78
79