Что вы хотите сделать, это принять объединение соединений и посмотреть, совпадает ли размер с числом. Вы могли бы сделать определенную разницу, но тогда вам придется делать это в обоих направлениях. Их можно легко сделать с помощью методов расширения 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.
Необходимо ли проверить оба направления? Разве это недостаточно, чтобы проверить, что обе хэш-таблицы имеют одинаковое количество ключей и что все в первом находится во втором, а пары ключ/значение равны? –
@Joel Rondeau: Ты прав. – jason