2012-03-29 1 views
10

Ich sehe viele Fragen/Antworten darüber, wie man eine Hashtable in ein Dictionary konvertiert, aber wie kann ich ein Dictionary in eine Hashtable konvertieren?Wie Dictionary <> zu Hashtable in C# konvertieren?

+1

Und warum würden Sie das brauchen? Eine Hashtabelle ist insofern sehr spezifisch, als ein Wert, der für den Schlüssel berechnet wird, die Position des Wertes erzeugt ... und ein Wörterbuch nur eine gerade Sammlung (Schlüssel, Wert) ist. Warum möchten Sie ein Wörterbuch in eine Hashtabelle konvertieren? –

+0

Auf der einfachsten Ebene bin ich faul. Das Objekt vom Typ "Hashtable" wird an vielen Stellen verwendet. – jpints14

+0

Das ist an sich kein Grund, es zu benutzen. Wörterbücher und Hashtables sind verschiedene Biester, die unter verschiedenen Umständen verwendet werden. Sie wissen, eine Liste wird auch an vielen Orten verwendet ... Also warum nicht das verwenden? : -s –

Antwort

23

der einfachste Weg ist mit Konstruktor von Hashtable:

 var dictionary = new Dictionary<object, object>(); 
     //... fill the dictionary 
     var hashtable = new Hashtable(dictionary); 
4

ziemlich selten scheint, tun zu wollen, aber am einfachsten:

var hash = new Hashtable(); 
foreach(var pair in dictionary) { 
    hash.Add(pair.Key,pair.Value); 
} 

(sofern keine ungewöhnlichen „Geräte getippt Gleichheitsprüfung aber nicht untypisierten Gleichheit prüfen“ usw.)

+1

Jetzt nur dies in eine 'ToHashTable' Erweiterungs-Methode und voila! – Dismissile

+1

Es gibt sogar einen [Konstruktor] (http://msdn.microsoft.com/en-us/library/kdkta2sx.aspx), der dasselbe tut. – Joey

+0

Das habe ich mir vorgenommen. Ich fragte mich, ob es einen nicht so offensichtlichen Weg dafür gab. Aber danke! – jpints14

8
Dictionary<int, string> dictionary = new Dictionary<int, string> 
    { 
     {1,"One"}, 
     {2,"Two"} 
    }; 
Hashtable hashtable = new Hashtable(dictionary); 

Versuchen Sie, diese

3

Sie könnten mit der Hashtable Konstruktor Überlastung zu prüfen, die ein IEqualityComparer Parameter übernehmen:

var hashtable = new Hashtable(dictionary, (IEqualityComparer) dictionary.Comparer); 

Auf diese Weise Ihre Hashtable verwenden die gleichen Comparer wie das Wörterbuch. Wenn Ihr Wörterbuch zum Beispiel einen Zeichenschlüssel ohne Berücksichtigung der Groß-/Kleinschreibung verwendet, möchten Sie möglicherweise auch, dass Ihre Hashtable nicht zwischen Groß- und Kleinschreibung unterscheidet. Zum Beispiel:

var d = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 
d.Add("a", "a"); 
d.Add("b", "b"); 

bool found; 
found = d.ContainsKey("A"); // true 

var hashtable1 = new Hashtable(d); 
var hashtable2 = new Hashtable(d, (IEqualityComparer) d.Comparer); 

found = hashtable1["A"] != null; // false - by default it's case-sensitive 

found = hashtable2["A"] != null; // true - uses same comparer as the original dictionary