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
}
}