2011-02-09 2 views
1

Hallo в C# я получил два хеш объекта из которых пара ключ/значение такое же и я хочу, чтобы проверить, что две Hashtable пары ключ/значение равны ..Hashtable А равно в hashTable управления B

я пытался но не работает

Должен ли я проверять все элементы с помощью foreach?

благодаря

ответ

3

Что вы хотите сделать, это принять объединение соединений и посмотреть, совпадает ли размер с числом. Вы могли бы сделать определенную разницу, но тогда вам придется делать это в обоих направлениях. Их можно легко сделать с помощью методов расширения Linq, но так как вы используете Hashtable вы должны использовать Cast(), чтобы получить его в IEnumerable:

 var table1 = new Hashtable {{"A", 1}, {"B", 2}, {"C", 3}}; 
     var table2 = new Hashtable {{"B", 2}, {"A", 1}, {"C", 3}}; 

     bool same = table1.Cast<DictionaryEntry>().Union(table2.Cast<DictionaryEntry>()).Count() == table1.Count; 

     Console.WriteLine("Same = " + same); 

Я обычно рекомендую словарь над Hashtable, чтобы получить типовую безопасность, но Cast <>() позволяет использовать материал Linq только для поиска со старым Hashtable.

3

я пытался до равного метода в hashTable, но не работал

Это сделает ссылочный сравнение, чтобы увидеть, если две ссылки на хеш-таблицы одинаковы. Это не то, что вы хотите.

shoul i проверить все предметы с помощью foreach?

Да. Убедитесь, что два хеш-таблицы имеют одинаковое количество элементов и что все пары ключ/значение в первом находятся во втором.

+0

Необходимо ли проверить оба направления? Разве это недостаточно, чтобы проверить, что обе хэш-таблицы имеют одинаковое количество ключей и что все в первом находится во втором, а пары ключ/значение равны? –

+0

@Joel Rondeau: Ты прав. – jason