La façon la plus simple serait de simplement copier les objets:
var newDictionary = new OrderedDictionary();
foreach(DictionaryEntry de in orderedDictionary)
{
newDictionary.Add(de.Key, de.Value);
}
MISE À JOUR:
Ce code ne sera pas créer une copie profonde des valeurs dans le dictionnaire.
Exemple:
var orderedDictionary = new OrderedDictionary();
orderedDictionary.Add("1", new List<int> { 1, 2 });
var newDictionary = new OrderedDictionary();
foreach(DictionaryEntry de in orderedDictionary)
{
newDictionary.Add(de.Key, de.Value);
}
deux dictionnaire contient une entrée avec la touche « 1 » et la même liste. Supprimer un élément de cette liste dans l'un des dictionnaires modifiera également le contenu de la liste dans l'autre dictionnaire, car il n'y a qu'une seule liste.
Console.WriteLine(((List<int>)orderedDictionary["1"]).Count);
Console.WriteLine(((List<int>)newDictionary["1"]).Count);
Console.WriteLine(ReferenceEquals(orderedDictionary["1"], newDictionary["1"]));
((List<int>)orderedDictionary["1"]).Remove(1);
Console.WriteLine(((List<int>)orderedDictionary["1"]).Count);
Console.WriteLine(((List<int>)newDictionary["1"]).Count);
Cette volonté génèrerait les éléments suivants:
2
2
True
1
1
Attribution d'une nouvelle valeur à une clé dans l'un du dictionnaire n'a cependant aucun effet sur l'autre dictionnaire:
newDictionary["1"] = new List<int>{3,4};
Console.WriteLine(ReferenceEquals(orderedDictionary["1"], newDictionary["1"]));
Console.WriteLine(((List<int>)orderedDictionary["1"]).Count);
Console.WriteLine(((List<int>)newDictionary["1"]).Count);
Cette volonté sortie:
False
2
3
Plutôt que r eprise une discussion de profondeur Je fournis un lien vers une vieille question http://stackoverflow.com/q/78536/659190 – Jodrell