Though on the other hand, although it doesn't completely fit the
contract for the interface, having it implement IDictionary`2 can be
useful for things like extension methods that only read values, etc.
It just requires the user understanding that it is a specialized
collection and thus does differ from the interface's contract.
The last option is for BidirectionalDictionary`2 not to implement
IDictionary`2 directly but have a property that exposes
BidirectionalDictionary`2 as an IDictionary`2 for convenience.
Personally I'm in favor of the current implementation as any user's of
a bidirectional dictionary have a specific reason to use it and should
understand the difference.