Key-value pairs are used in the IMap; interface, when it inherits IIterable;. Practical implementations of IMap; are iterable, and iterating or calling First /Current explicitly will return instances of IKeyValuePair; using the same constraints as does the IMap; implementation.