Я знаю, что этот вопрос слишком стар, чтобы получить какие-либо отклики, но мне не понравился ни один из ответов, поэтому я опубликую свой собственный в надежде предложить другой вариант для будущих читателей.
Следующие не работают у меня в .NET 4.0:
myDictionary.Values.OrderBy( x => x.Key ).Last();
Я подозреваю, что проблема в том, что «x» представляет значение в словаре, а значение не имеет ключа (словарь хранит ключ, значения словаря - нет). Возможно, я тоже ошибаюсь в использовании этой техники.
В любом случае, это решение будет медленным для больших словарей, вероятно O (n log n) для пользователей CS, потому что это сортировка всего словаря только для получения одной записи , Это все равно, что переставить всю коллекцию DVD, чтобы найти один конкретный фильм.
var lastDicVal = dic.Values.Last();
хорошо зарекомендовал себя как плохая идея. На практике это решение действительно работает большую часть времени из-за реализации словаря Microsoft, но в терминах разработки программного обеспечения это бессмысленно и на него нельзя полагаться. Даже если он работает каждый раз до конца вечности, он представляет собой небрежную, небезопасную практику кодирования.
Мое решение заключается в следующем:
var lastValue = dic[dic.Keys.Max()];
Функция Keys.max () намного быстрее, чем сортировка O (n) вместо O (n log n) .
Если производительность настолько важна, что даже O (n) слишком медленный, последний вставленный ключ может отслеживаться в отдельной переменной, используемой для замены dic.Keys.Max () , которая выполнит весь поиск O (1) плюс любые накладные расходы на отслеживание последней вставленной записи.