2016-07-29 43 views
0

Ich habe derzeit ein Problem beim Versuch, eine Hashtable und ein Wörterbuch miteinander zu vergleichen.Vergleichen Hashtable und IDictionary für die gleichen Daten (asp.net, C#)

Ich benutze ein Telerik radgrid, um ein Update zu tun.

Auf dem Update möchte ich überprüfen, ob die oldvalues ​​genau die gleichen wie die neuen Werte sind, wenn sie übereinstimmen, werde ich nur aus der Methode abbrechen.

Unten ist der Code, den ich verwende. Ich speichere neue Werte in Hashtable und SavedOldValues ​​in einem IDictionary.

if ((e.Item is GridEditableItem) && e.Item.IsInEditMode && e.CommandName.Equals("Update")) 
    { 
     try 
     { 
      GridEditableItem UpdateItem = (GridEditableItem)e.Item; 
      Hashtable newValues = new Hashtable(); 
      e.Item.OwnerTableView.ExtractValuesFromItem(newValues, UpdateItem); 
      IDictionary oldValues = UpdateItem.SavedOldValues; 

Update Frage: So habe ich nehme Ratschläge unten und Schleife obwohl die oldValues ​​Wörterbuch und prüfen, ob der Schlüssel in dem NewValues ​​Hashtable existiert.

Unten ist was ich suche zu erreichen. Im Grunde muss ich den Schlüssel verwenden, um den Wert im Wörterbuch zu finden, aber ich kann nicht scheinen, es zur Arbeit zu bringen.

Fehler i erhalten, ist Objekt keine Definition enthält für Enthält

foreach (DictionaryEntry oldEntry in oldValues) 
       { 
        if (newValues.ContainsKey(oldEntry.Key) && 
         newValues[oldEntry.Key].Contains(oldEntry.Value)) 
        { 
         //Data matches 
        } 
       } 

Vielen Dank für jede Hilfe.

+0

'HashTable' ist eine völlig veraltete Datenstruktur, und das seit über einem Jahrzehnt. Sie sollten wirklich vermeiden, es vollständig zu verwenden, und verwenden Sie einfach ein 'Dictionary'. – Servy

Antwort

0

Da das Wörterbuch, das Sie verwenden, nicht generisch ist, dauert das Abrufen der Werte von IDictionary und Hashtable die gleiche Zeit. Aber Hashtable fügt Thread-Sicherheit hinzu.

0

Der Trick hier ist, müssen Sie sortieren Ihre abgerufenen Daten, aus beiden Sammlungen, in das gleiche Format. Auf diese Weise kann davon ausgegangen werden, dass diese neuen sortierten Sammlungen in der gleichen Reihenfolge liegen. Wenn sie also gleichwertig sind, haben Sie dieselben Werte.

Sie können einige nette Klassen wie SortedDictionary auffüllen, die bereits durch Ihren Code zugänglich sind, oder Sie können Ihren eigenen Sortieralgorithmus schreiben. Dann vergleichen Sie einfach die beiden sortierten Sammlungen nach jedem Element, um die Äquivalenz zu überprüfen.

Zusätzlich können Sie das HashTaple oder Dictionary durchlaufen und ContainsKey(TKey) und ContainsValue(TValue) für die nicht durchgeschleifte Sammlung aufrufen, um die Äquivalenz zu überprüfen.