Heim >Backend-Entwicklung >C#.Net-Tutorial >Eine kurze Diskussion der Codebeispiele von Hashtable und Dictionary in C#
Eine kurze Diskussion von Codebeispielen von Hashtable und Dictionary in C#:
Dictionary
Hashtable ist nicht generisch und nicht typsicher; Dictionary ist generisch und typsicher; Die Schlüsselwerte von Hashtable sind alle vom Objekttyp, aber der Datentyp der Schlüsselwerte des Wörterbuchs kann angegeben werden.
Mit anderen Worten: Wenn in der Hashtable ein anderer Datentyp als Object gespeichert ist, müssen die Daten beim Herausnehmen in der Typkonvertierung angezeigt werden, bevor sie normal verwendet werden können. Das Wörterbuch hat dieses Problem nicht.
In dieser Hinsicht entspricht Hashtable Dictionary
Zweitens die Konsistenz der Reihenfolge beim Lesen von Daten und der Reihenfolge beim Hinzufügen von DatenHashtable ht = new Hashtable(); Dictionary<string, int> dic = new Dictionary<string, int>(); ht.Add("A", 1); dic.Add("A", 1); //Console.WriteLine(ht["A"]+1); //编译错误!Object类型不能和int类型直接进行相加。 Console.WriteLine((int)ht["A"] + 1);//编译通过,输出结果为:2 Console.WriteLine(dic["A"] + 1); //编译通过,输出结果为:2
Das Wörterbuch kann die Reihenfolge beim Lesen der Daten beim Hinzufügen beibehalten, jedoch nicht beim Löschen Nach Lösch- und Hinzufügungsvorgängen ist jedoch nicht mehr gewährleistet, dass die Reihenfolge beim Lesen der Daten mit der Reihenfolge beim Hinzufügen übereinstimmt.
Dictionary<int, int> dic = new Dictionary<int, int>(); dic.Add(0, 0); dic.Add(1, 1); dic.Add(2, 2); Console.WriteLine("仅仅经过添加元素处理之后:"); foreach (KeyValuePair<int, int> kvp in dic) { Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value); } dic.Remove(0); dic.Add(3, 3); Console.WriteLine("经过删除和添加元素处理之后:"); foreach (KeyValuePair<int, int> kvp in dic) { Console.WriteLine("Key:" + kvp.Key + " Value:" + kvp.Value); } Console.ReadKey();Wenn im Wörterbuch ein Element gelöscht wird, füllt das neu hinzugefügte Element die Position des gelöschten Elements aus, wodurch die Reihenfolge des Hinzufügens von Daten nicht mit der Reihenfolge des Lesens von Daten übereinstimmt.
Für Hashtable wird die Datenspeicherreihenfolge nach einem bestimmten Algorithmus berechnet, sodass in den meisten Fällen die Datenlesereihenfolge und die Datenhinzufügungsreihenfolge inkonsistent sind.
Wenn Sie also die Reihenfolge beim Hinzufügen von Daten beibehalten müssen, sollten Sie Dictionary und Hashtable am besten nicht verwenden.
Drittens, wenn ein nicht vorhandener Schlüsselwert verwendet wird, um einen Wert in einer Hashtabelle oder einem Wörterbuch zu erhalten
Wenn für Hashtable ein nicht vorhandener Schlüsselwert verwendet wird, um den Wert zu erhalten, wird eine Null zurückgegeben
Hashtable ht = new Hashtable(); Console.WriteLine(ht["b"]==null); Console.ReadKey();Wenn für das Wörterbuch ein nicht vorhandener Schlüsselwert zum Abrufen des Werts verwendet wird, wird eine Ausnahme vom Typ „System.Collections.Generic.KeyNotFoundException“ ausgelöst.
Daher können Sie beim Abrufen eines Werts aus einem Wörterbuch oder einer Hashtabelle zunächst feststellen, ob der Schlüsselwert vorhanden ist (verwenden Sie zur Bestimmung die Methode „ContainsKey ()“), um unerwartete Werte oder Ausnahmen zu verhindern.
Viertens Thread-Sicherheit
Das Wörterbuch ist nicht threadsicher, Hashtable ist threadsicher.
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion der Codebeispiele von Hashtable und Dictionary in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!