NameValueCollection
и ILookup
отличаются по нескольким причинам.
Во-первых, NameValueCollection является картой из строки -> строка - каждый ключ может иметь только одно значение, и ключ, и значение должны быть строками. Это не похоже на то, что оно соответствует вашим требованиям:
Мне нужно представить некоторые данные, которые имеют ключ и одно или несколько значений
Во-вторых, ILookup
по сути является универсальной мультикартой - она сопоставляет ключ с набором из одного или нескольких значений - и ключ, и значения могут быть любого типа. ILookup<,>
является неизменным, как вы упоминаете, но он также не может быть создан напрямую. Единственный способ получить экземпляр - использовать метод Enumerable.ToLookup()
. Для этого необходимо, чтобы все данные были доступны одновременно - вы не можете построить мультикарту с течением времени.
Если вам действительно нужна изменяемая мультикарта, вы должны взглянуть на EditableLookup<,>
в MiscUtil , в свою очередь Dictionary<TKey,List<TValue>>
в своем собственном типе.