using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Developpez.Dotnet.Collections { /// /// Fournit des méthodes d'extension pour manipuler des dictionnaires /// public static class DictionaryExtensions { /// /// Renvoie la valeur correspondant à la clé spécifiée si celle-ci existe, ou la valeur par défaut /// spécifiée si la clé n'existe pas /// /// Type de la clé /// Type de la valeur /// Le dictionnaire à partir duquel renvoyer la valeur /// La clé recherchée /// La valeur par défaut à renvoyer si la clé n'existe pas /// Si la clé existe, renvoie la valeur correspondante. Sinon, renvoie la valeur par défaut public static V GetValueOrDefault(this IDictionary dictionary, K key, V defaultValue) { V value; if (!dictionary.TryGetValue(key, out value)) value = defaultValue; return value; } /// /// Renvoie la valeur correspondant à la clé spécifiée si celle-ci existe, ou la valeur par défaut /// du type de la valeur si la clé n'existe pas /// /// Type de la clé /// Type de la valeur /// Le dictionnaire à partir duquel renvoyer la valeur /// La clé recherchée /// Si la clé existe, renvoie la valeur correspondante. Sinon, renvoie la valeur par défaut public static V GetValueOrDefault(this IDictionary dictionary, K key) { return dictionary.GetValueOrDefault(key, default(V)); } /// /// Renvoie un wrapper en lecture seule pour un dictionnaire /// /// Type de la clé /// Type de la valeur /// Le dictionnaire pour lequel renvoyer un wrapper /// Un wrapper en lecture seule du dictionnaire public static ReadOnlyDictionary AsReadOnly(this IDictionary dictionary) { return new ReadOnlyDictionary(dictionary); } /// /// Renvoie un wrapper ou une copie en lecture seule pour un dictionnaire /// /// Type de la clé /// Type de la valeur /// Le dictionnaire pour lequel renvoyer un wrapper /// true pour renvoyer une copie en lecture seule du dictionnaire ; false pour renvoyer simplement un wrapper du dictionnaire existant /// Un wrapper ou une copie en lecture seule du dictionnaire public static ReadOnlyDictionary AsReadOnly(this IDictionary dictionary, bool copy) { return new ReadOnlyDictionary(dictionary, copy); } /// /// Reconstruit un dictionnaire à partir d'une séquence de paires clé/valeur /// /// Type de la clé /// Type de la valeur /// Séquence de paires clé/valeur /// Un dictionnaire qui contient les paires clé/valeur de la séquence d'origine public static IDictionary ToDictionary(this IEnumerable> source) { return source.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); } } }