К сожалению, этого нельзя сделать. Для Dictionary<TKey, TValue>
было бы вполне разумно выставить bool TryGetEntry(TKey key, KeyValuePair<TKey, TValue> entry)
метод, но он этого не делает.
Как предложил стоп-кран в комментариях, простейший подход, вероятно, состоит в том, чтобы каждое значение в вашем словаре представляло собой пару с тем же ключом, что и ключ в словаре. Итак:
var dictionary = new Dictionary<string, KeyValuePair<string, int>>(StringComparer.OrdinalIgnoreCase)
{
// You'd normally write a helper method to avoid having to specify
// the key twice, of course.
{"abc1", new KeyValuePair<string, int>("abc1", 1)},
{"abC2", new KeyValuePair<string, int>("abC2", 2)},
{"abc3", new KeyValuePair<string, int>("abc3", 3)}
};
if (dictionary.TryGetValue("Abc2", out var entry))
{
Console.WriteLine(entry.Key); // abC2
Console.WriteLine(entry.Value); // 2
}
else
{
Console.WriteLine("Key not found"); // We don't get here in this example
}
Если это поле в классе, вы можете написать вспомогательные методы, чтобы сделать его проще. Вы могли бы даже написать свой собственный класс-оболочку вокруг Dictionary
для реализации IDictionary<TKey, TValue>
, но добавить дополнительный метод TryGetEntry
, чтобы вызывающему никогда не нужно было знать, как выглядит «внутренний» словарь.