using System; using System.Collections; using System.Collections.Generic; public class DataCollection<TClass, TKey> : IEnumerable<TClass> { private readonly Dictionary<TKey, TClass> itemsByKey; public DataCollection(IEnumerable<TClass> items, Func<TClass, TKey> keySelector) { itemsByKey = ToDictionarySafe(items, keySelector); } private IEnumerable<TClass> AsEnumerable() => itemsByKey.Values; public TClass GetKey(TKey key, TClass def = default(TClass)) { if (itemsByKey.TryGetValue(key, out var val)) return val; return def; } public IEnumerator<TClass> GetEnumerator() => AsEnumerable().GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => AsEnumerable().GetEnumerator(); public static Dictionary<Y, T> ToDictionarySafe<T, Y>(IEnumerable<T> items, Func<T, Y> keySelector) { var dict = new Dictionary<Y, T>(); foreach (var item in items) { var key = keySelector(item); if (key != null && !dict.ContainsKey(key)) { dict[key] = item; } } return dict; } }
592200cookie-checkC# Simple Data Collection with dictionary