Вам необходимо создать новый KeyValuePair
1 - но имейте в виду, что KVP в любом случае является типом значения (структурой), поэтому вы не вводите новую неэффективность, выполняя это , Любой метод, возвращающий KVP, в любом случае будет создавать копию - вы просто создаете экземпляр напрямую.
Вы всегда можете добавить метод расширения к IDictionary<TKey, TValue>
, если хотите:
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).