2008-09-29 4 views
7

Ich möchte eine Instanz von generischen IDictionary in nicht generische IDictionary konvertieren. Kann ich das tun, ohne eine neue Instanz von IDictionary zu erstellen? Wird für diese Aufgabe ein Framework unterstützt?Wie generisches Dictionary in nicht generisches ohne Enumeration zu konvertieren?

Ich habe versucht, generische IDictionary in Klasse, die nicht-genetische IDictionary implementiert, aber ich entdeckte, dass ich auch irgendwie generische ICollection in nongeneric konvertieren, so dass ich mit Mark Gravell Lösung gehen.

Antwort

18

Es hängt alles von der konkreten Implementierung ab, die Sie verwenden.

Zum Beispiel, Wörterbuch < TKey, TValue > implementiert sowohl die generische IDictionary < TKey, TValue > und die nicht-generische IDictionary - wenn Sie also ein Wörterbuch < TKey haben, TValue > Sie es entweder ohne Problem verwenden können:

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

dies ist jedoch nicht notwendigerweise für alle < TKey, TValue > imlpementations IDictionary gelten, da es nicht wahr ist, dass IDictionary < TKey, TValue >: IDictionary. Wenn Sie tief in den Eingeweiden eines generischen Codes stecken, können Sie das aktuelle Wörterbuch testen:

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