Mainly because ToDictionary/ToLookup crashes on null / duplicate values + IDictionary TryGetValue is cumbersome
using System; using System.Collections.Generic; namespace Domain.Helpers { public interface IDict<Key, T> { T ByKey(Key key); } public class LookUpHelper { public static IDict<Key, T> From<Key, T>(IEnumerable<T> items, Func<T, Key> keySelector) => new LookUp<Key, T>(items, keySelector); private class LookUp<Key, T> : IDict<Key, T> { public LookUp(IEnumerable<T> items, Func<T, Key> keySelector) { Items = ToDictionarySafe(items, keySelector); } public LookUp(IDictionary<Key, T> items) { Items = items; } private IDictionary<Key, T> Items { get; } public T ByKey(Key key) { if (key == null) return default; Items.TryGetValue(key, out var val); return val; } private Dictionary<Key, T> ToDictionarySafe(IEnumerable<T> items, Func<T, Key> keySelector) { var dict = new Dictionary<Key, T>(); foreach (var item in items) { var key = keySelector(item); if (key == null || dict.ContainsKey(key)) continue; dict[key] = item; } return dict; } } } }
611000cookie-checkC# LookUp helper