public static V GetValueOrDefault <K, V>(this ImHashMap <K, V> map, K key, V defaultValue = default(V)) { var hash = key.GetHashCode(); while (map != null) { if (map.Hash == hash) { return(ReferenceEquals(key, map.Key) || key.Equals(map.Key) ? map.Value : map.GetConflictedValueOrDefault(key, defaultValue)); } map = hash < map.Hash ? (map as ImHashMap <K, V> .Branch)?.LeftNode : (map as ImHashMap <K, V> .Branch)?.RightNode; } return(defaultValue); }