/// <summary> /// Merges dictionaries /// </summary> /// <typeparam name="TK">The type of the tk.</typeparam> /// <typeparam name="TV">The type of the tv.</typeparam> /// <param name="mergeTechnique">The merge technique.</param> /// <param name="dictionaries">The dictionaries.</param> /// <returns>Dictionary<TK, TV>.</returns> /// <exception cref="System.ArgumentException">Invalid or unsupported Merge Technique - mergeTechnique</exception> public static IDictionary <TK, TV> Merge <TK, TV>(MergeTechnique mergeTechnique, params IDictionary <TK, TV>[] dictionaries) { switch (mergeTechnique) { case MergeTechnique.Unique: return(MergeUnique(dictionaries)); case MergeTechnique.TakeFirst: return(MergeFirst(dictionaries)); case MergeTechnique.TakeLast: return(MergeLast(dictionaries)); default: throw new EnumValueException <MergeTechnique>(mergeTechnique); } }
/// <summary> /// Merges this dictionary with another one /// </summary> /// <typeparam name="TK">The type of the tk.</typeparam> /// <typeparam name="TV">The type of the tv.</typeparam> /// <param name="dict">The dictionary.</param> /// <param name="other">The other.</param> /// <param name="mergeTechnique">The merge technique.</param> /// <returns>Dictionary<TK, TV>.</returns> /// <remarks>Source and target dictionaries are left untouched</remarks> public static IDictionary <TK, TV> MergeWith <TK, TV>(this IDictionary <TK, TV> dict, IDictionary <TK, TV> other, MergeTechnique mergeTechnique = MergeTechnique.Unique) { var result = Merge(mergeTechnique, dict, other); return(result); }
/// <summary> /// Create a Dictionary from a NameValueCollection /// </summary> /// <param name="collection">The collection.</param> /// <param name="mergeTechnique">The merge technique.</param> /// <returns>IDictionary<System.String, System.String>.</returns> public static IDictionary <string, string> ToDictionary(this NameValueCollection collection, MergeTechnique mergeTechnique) { var dictionaries = new List <IDictionary <string, string> >(); for (var i = 0; i < collection.Count; ++i) { var key = collection.GetKey(i); var values = collection.GetValues(i) ?? Enumerable.Empty <string>(); foreach (var value in values) { var dict = new Dictionary <string, string>() { { key, value } }; dictionaries.Add(dict); } } return(DictionaryExtensions.Merge(mergeTechnique, dictionaries.ToArray())); }