2016-07-29 3 views
0

現在、HashtableとDictionaryを互いに比較しようとして問題が発生しています。同じデータ(asp.net、c#)のHashtableとIDictionaryを比較

Telerik radgridを使用して更新を行っています。

アップデートでは、古い値が新しい値とまったく同じかどうかをチェックしたい場合は、一致する場合はメソッドから取り消します。

以下は私が使用しているコードです。 IDictionary内のHashtableとSavedOldValuesに新しい値を格納します。

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; 

質問へのアップデート: だから私はoldValues辞書かかわらず、以下のアドバイスやループを取り、キーがnewValues Hashtableに存在するかどうかを確認しています。

以下は私が達成しようとしているものです。基本的に私は辞書の値を見つけるためにキーを使用する必要がありますが、私はそれを働かせるように見えることはできません。私が手

エラーは、オブジェクトが提供する任意の助け

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

感謝が含まれていますの定義が含まれていませんです。

+0

'HashTable'は完全に時代遅れのデータ構造であり、10年以上にわたって存在しています。あなたは本当に完全にそれを使用することを避け、単に 'Dictionary'を使います。 – Servy

答えて

0

使用している辞書が汎用ではないため、IDictionaryHashtableの値の取得には同じ時間がかかります。しかし、ハッシュテーブルはスレッドの安全性を高めます。

0

ここでは、検索したデータを両方のコレクションから同じ形式にする必要があります。そうすることで、これらの新しいソートされたコレクションは同じ順序であるとみなすことができ、したがって同等であれば同じ値を持ちます。

コードですでにアクセス可能なSortedDictionaryのような素敵なクラスを作成したり、独自の並べ替えアルゴリズムを記述することができます。次に、2つのソートされたコレクションを各要素で比較し、等価性をチェックします。

また、HashTapleまたはディクショナリをループし、非ループスルーコレクションでContainsKey(TKey)およびContainsValue(TValue)を呼び出して同等性を確認することもできます。

関連する問題