using System; using System.Collections; using System.Collections.Generic; using System.Xml.Serialization; using Developpez.Dotnet.Properties; namespace Developpez.Dotnet.Xml.Serialization { /// /// Une collection de paires clé/valeurs pour permettre la sérialisation XML d'un dictionnaire /// /// Type de la clé /// Type de la valeur public class XmlDictionaryEntryCollection : ICollection> { /// /// Initialise une nouvelle instance de XmlDictionaryEntryCollection /// public XmlDictionaryEntryCollection() { this.Dictionary = new Dictionary(); } /// /// Initialise une nouvelle instance de XmlDictionaryEntryCollection pour le dictionnaire spécifié /// /// Le dictionnaire pour lequel on veut obtenir la collection de paires clé/valeur public XmlDictionaryEntryCollection(IDictionary dictionary) { dictionary.CheckArgumentNull("dictionary"); this.Dictionary = dictionary; } /// /// Renvoie le dictionnaire correspondant à cette XmlDictionaryEntryCollection /// [XmlIgnore] public IDictionary Dictionary { get; private set; } #region ICollection> Members /// /// Ajoute une paire clé/valeur à la collection /// /// Paire clé/valeur à ajouter public void Add(XmlDictionaryEntry item) { this.Dictionary.Add(item.Key, item.Value); } /// /// Vide la collection /// public void Clear() { this.Dictionary.Clear(); } /// /// Teste si la collection contient la paire clé/valeur spécifiée /// /// La paire clé/valeur à rechercher /// true si la collection contient la paire clé/valeur spécifiée, false sinon public bool Contains(XmlDictionaryEntry item) { return this.Dictionary.ContainsKey(item.Key); } /// /// Copie les paires clé/valeur de la collection vers un tableau /// /// Le tableau vers lequel copier les données /// L'index dans array où la copie commence public void CopyTo(XmlDictionaryEntry[] array, int arrayIndex) { int index = arrayIndex; if (arrayIndex + this.Dictionary.Count > array.Length) throw new ArgumentException(ExceptionMessages.ArrayCapacityInsufficient); foreach (var kvp in this.Dictionary) { var entry = new XmlDictionaryEntry { Key = kvp.Key, Value = kvp.Value }; array[index++] = entry; } } /// /// Renvoie le nombre d'éléments dans la collection /// public int Count { get { return this.Dictionary.Count; } } /// /// Indique si la collection est en lecture seule /// public bool IsReadOnly { get { return this.Dictionary.IsReadOnly; } } /// /// Supprime une paire clé/valeur de la collection /// /// La paire clé/valeur à supprimer /// true si la paire clé/valeur a été supprimée, false sinon public bool Remove(XmlDictionaryEntry item) { return this.Dictionary.Remove(item.Key); } #endregion #region IEnumerable> Members /// /// Renvoie un objet qui énumére les éléments de la collectino /// /// Un énumérateur qui parcourt les éléments de la collection public IEnumerator> GetEnumerator() { foreach (var kvp in this.Dictionary) { yield return new XmlDictionaryEntry { Key = kvp.Key, Value = kvp.Value }; } } #endregion #region IEnumerable Members /// /// Renvoie un objet qui énumére les éléments de la collectino /// /// Un énumérateur qui parcourt les éléments de la collection IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } #endregion } }