Церебр прав. Здесь больше информации: Блокировка, Выход из системы, Перезагрузка, Завершение работы, Гибернация, Ожидание в .Net
Вам нужно создать новую KeyValuePair
1 - но имейте в виду, что KVP в любом случае является типом значения (структурой), так что это не похоже на вас » повторное введение новой неэффективности, делая это. Любой метод, возвращающий KVP, в любом случае будет создавать копию - вы просто создаете экземпляр напрямую.
Вы всегда можете добавить метод расширения к IDictionary
, если хотите:
public static KeyValuePair<TKey, TValue> GetEntry<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key)
{
return new KeyValuePair<TKey, TValue>(key, dictionary[key]);
}
] Как отмечено в комментариях, вполне возможно, что ключ, который хранится в словаре, не тот же , что предоставлен, просто семантически равен - по некоторой семантике, которая может быть настроена с помощью IEqualityComparer
(например, со словарем без учета регистра). В этом случае приведенный выше код не вернет фактическую запись в словаре, но запись с ключом, который вы предоставили для поиска. К сожалению, нет эффективного способа найти исходный ключ - вам придется перебирать словарь: (
1 Я знал, что вы можете перебирать словарные статьи и таким образом находить подходящую запись, но я не вижу причин, по которым вы когда-либо хотели бы это сделать, если у вас есть отличный индексатор, который имеет O (1) вместо O (N).
Поскольку Dictionary
реализует IEnumerable
, вы можете использовать linq:
var pair = _dictionary.SingleOrDefault(p => p.Key == myKey);