2008-09-29 8 views
7

Je souhaite convertir une instance de IDictionary générique en IDictionary non générique. Puis-je le faire sans créer une nouvelle instance de IDictionary? Y a-t-il un support de cadre pour cette tâche?Comment faire pour convertir un dictionnaire générique en non générique sans énumération?

J'ai essayé d'encapsuler un IDictionary générique dans une classe qui implémente un IDictionary non-génétique, mais j'ai découvert que je devais aussi convertir ICollection générique en un non-générique donc je vais avec la solution Mark Gravell.

Répondre

18

Tout dépend de l'implémentation concrète que vous utilisez.

Par exemple, Dictionnaire < TKey, TValue > implémente IDictionary générique < TKey, TValue > et IDictionary non-générique - donc si vous avez un dictionnaire < TKey, TValue > vous pouvez l'utiliser soit comme sans problème:

 Dictionary<int, string> lookup = new Dictionary<int,string>(); 
     IDictionary<int,string> typed = lookup; 
     IDictionary untyped = lookup; 

Cependant, cela ne vaut pas nécessairement pour tous IDictionary < TKey, TValue > imlpementations, car il est vrai que IDictionary < TKey, TValue >: IDictionary. Si vous êtes dans les entrailles d'un code générique, vous pouvez tester le dictionnaire actuel:

 IDictionary<int,string> typed = ... 
     IDictionary untyped = typed as IDictionary; 
     if(untyped == null) {/* create by enumeration */} 
Questions connexes