2010-11-03 4 views
0

Comment copier en profondeur une hashtable dans une nouvelle hashtable?hashtable de copie en profondeur

+1

http://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-an-object-in-net-c-specifically – user281693

+1

Est-ce une question de devoirs? –

Répondre

0

Vous pouvez créer un nouveau avec l'ancien comme paramètre:

Dictionary<a,b> dic=new Dictionary<a,b>(oldDict) 

et même pour HashSet<T>. Cela construit une nouvelle hashtable à partir du contenu de l'ancien.

Remarque: Si vous n'utilisez pas le comparateur par défaut, vous devez le spécifier à nouveau dans le constructeur.

Dictionary<TKey, TValue>(IDictionary<TKey, TValue>) Initialise une nouvelle instance de la classe Dictionary qui contient des éléments copiés à partir IDictionary et utilise précisé le comparateur d'égalité par défaut pour le type de clé.

+0

Il ne copie pas en profondeur, les clés/valeurs qui sont stockées dans ce nouveau dictionnaire sont toujours les mêmes objets que ceux de votre ancien dictionnaire. – nos

+0

@nos, pas si ce sont des types de valeur. –

+0

J'ai les deux types de valeur et de référence dans la collection, donc http://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-an-object-in-net-c-specifically fonctionne le mieux .. – Allen

1

Que diriez-vous ceci:

public void CloneDict(Dictionary<K,V> dictionary) where V:IClonable 
{ 
    Dictionary<K,V> clonedOne = new Dictionary<K,V>(); 

    foreach(KeyValuePair<K,V> pair in dictoinary) { 
     clonedOne(pair.Key, (V) pair.Value.Clone() 
    } 
} 

mettre en œuvre ensuite le IClonable pour tout ce que vous les objets sont à stocker dans le dictionnaire. La même approche peut être appliquée à Hashtable mais seulement comme non générique.

Questions connexes