Hashtable A соответствует элементу управления HashtAble B - PullRequest
1 голос
/ 09 февраля 2011

Привет в c # Я получил два объекта хеш-таблицы, пара ключей / значений которых одинакова, и я хочу проверить, равны ли эти две пары ключ / значение хеш-таблицы.

Я попробовал метод равенства хеш-таблицы, ноработал

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

спасибо

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

То, что вы хотите сделать, это взять объединение множеств и посмотреть, равен ли размер количеству. Вы можете сделать разницу между сетами, но тогда вам придется сделать это обоими способами. Это легко сделать с помощью методов расширения 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);

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

3 голосов
/ 09 февраля 2011

Я попробовал равный метод хэш-таблицы, но не сработал

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

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

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

...