Я не верю, что в рамках есть класс, который делает это напрямую.
Кроме того, учитывая элегантный ответ на этот вопрос, стоило ли бы мне создать класс для представления этого обратимого словаря, когда я мог бы так же легко использовать LINQ для преобразования любого словаря в его эквивалент ключа значения? *
Ответ на оба ваших вопроса действительно зависит от того, как вы собираетесь получать доступ к вашим данным. Если вам нужен быстрый постоянный доступ, основанный на ключе и значении, вы, скорее всего, захотите создать свою собственную коллекцию.
Хотя это можно сделать очень и очень легко. Просто оберните два экземпляра Dictionary внутри вашего класса, и, когда вы добавите новый элемент, добавьте к обоим - один с ключом / значением и один со значением / ключом. Ваши подпрограммы поиска могут просто извлечь из соответствующей коллекции, и она останется около O (1) для времени доступа.
Если, однако, больше беспокоит память, вы можете просто использовать одну коллекцию и использовать LINQ для ее анализа. Это сделает ваш «обратный» поиск немного медленнее, так как вам придется каждый раз пересматривать.