2010-06-16 7 views
0

Я смотрю System.Collections.Specialized.NameValueCollection, и он принимает IEqualityComparer, что является хорошей новостью, если кто-то вроде меня хотел сортировать элементы в коллекции, скажем, что-то вроде алфавитного порядка ключей.NameValueCollection на самом деле ничего не делает с его IEqualityComparer?

Но, при более близком рассмотрении в Reflector, я не вижу класс NVC, фактически используя IEqualityComparer в любом месте. Правильно ли мое наблюдение? Как и в, я не вижу никакого использования для IEqualityComparer в перечислимом объекте, кроме как переустанавливать его составляющие элементы в каком-то основном порядке. И я не вижу метода на NVC, который, похоже, может захотеть что-то сделать (Sort, Arrange, OrderBy, Aggregate и т. Д.).

ответ

1

NameValueCollection использует значение Hashtable для сохранения значений. Hashtable использует IEqualityComparer для хэша и сравнения ключей для равенства.

Также обратите внимание, что IEqualityComparer не делает никакого заказа, он сравнивает только равенство (как следует из названия), так что это не полезно, если вы хотите рода значения/ключей.