9 Stimmen

Wie kann man ein generisches Wörterbuch ohne Aufzählung in ein nicht-generisches umwandeln?

Ich möchte eine Instanz von generic IDictionary zu nicht generischen IDictionary . Kann ich das tun, ohne eine neue Instanz von IDictionary ? Gibt es ein Framework, das diese Aufgabe unterstützt?

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

21voto

Marc Gravell Punkte 970173

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

Zum Beispiel implementiert Dictionary<TKey,TValue> sowohl das generische IDictionary<TKey,TValue> als auch das nicht-generische IDictionary - wenn Sie also ein Dictionary<TKey,TValue> haben, können Sie es ohne Probleme als beides verwenden:

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

Dies gilt jedoch nicht unbedingt für alle IDictionary<TKey,TValue>-Implementierungen, da es nicht stimmt, dass IDictionary<TKey,TValue> : IDictionary ist. Wenn Sie sich tief in den Eingeweiden eines generischen Codes befinden, können Sie das aktuelle Wörterbuch testen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X