Убедитесь, что время на сервере не установлено до времени публикации сайта.
Что вы имеете в виду под словом «Последний»? Вы имеете в виду последнюю добавленную стоимость?
Класс Dictionary
представляет собой неупорядоченную коллекцию. Добавление и удаление элементов может изменить то, что считается первым и последним элементом. Следовательно, нет возможности добавить последний элемент.
Существует класс упорядоченного словаря, доступный в форме SortedDictionary
. Но это будет упорядочено на основе сравнения ключей, а не порядка, в котором были добавлены значения.
РЕДАКТИРОВАТЬ
Несколько человек упомянули использование следующего подхода в стиле LINQ.
var last = dictionary.Values.Last();
Будьте очень осторожны при использовании этого метода. Он вернет последнее значение в коллекции Values. Это может быть или не быть последним значением, которое вы добавили в Словарь. Вероятно, это не так, как должно быть.
Если вы используете .NET 3.5, посмотрите:
dic.Keys.Last()
Если вам нужен предсказуемый порядок, используйте:
IDictionary<int, string> dic = new SortedDictionary<int, string>();
Словари являются неупорядоченными коллекциями - как таковые понятия первого или последнего элемента отсутствуют. Если вы ищете класс, который ведет себя как словарь, но поддерживает порядок вставки элементов, рассмотрите возможность использования OrderedDictionary
.
Если вы ищете коллекцию, которая сортирует элементы, рассмотрите возможность использования SortedDictionary
.
Если у вас есть существующий словарь, и вы ищете «последний» элемент с заданным порядком сортировки, вы можете использовать linq для сортировки коллекции, например:
myDictionary.Values.OrderBy( x => x.Key ).Last();
С осторожностью используйте Dictionary.Keys .
Рассмотрите возможность создания настраиваемой коллекции, содержащей ссылку в методе Добавить
настраиваемой коллекции. Это установит закрытое поле, содержащее последний добавленный ключ / значение (или оба) в зависимости от ваших требований.
Затем используйте метод Last ()
, который возвращает это. Вот доказательство концепции класса, чтобы показать, что я имею в виду (пожалуйста, не обращайте внимания на отсутствие реализации интерфейса и т. Д. - это пример кода):
public class LastDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> dict;
public LastDictionary()
{
dict = new Dictionary<TKey, TValue>();
}
public void Add(TKey key, TValue value)
{
LastKey = key;
LastValue = value;
dict.Add(key, value);
}
public TKey LastKey
{
get; private set;
}
public TValue LastValue
{
get; private set;
}
}
Если вам просто нужно значение, это должно сработать (при условии, что вы можете использовать LINQ):
dic.Values.Last()
Из документов :
В целях перечисления каждый элемент в словаре трактуется как KeyValuePair структура, представляющая значение и его ключ. Порядок, в котором возвращаемые элементы не определены .
Итак, я не думаю, что вы можете полагаться на Словарь
, чтобы вернуть последний элемент.
Используйте другую коллекцию. Может быть SortedDictionary
...
Вы можете использовать:
dic.Last()
Но в словаре действительно нет последнего элемента ( пары внутри не упорядочены каким-либо образом). Последний элемент всегда будет одним и тем же, но не очевидно, какой это может быть элемент.
Словарь не предназначен для доступа по порядку, поэтому первое, последнее не имеют значения. Вы хотите, чтобы значение было проиндексировано наивысшим ключом?
Dictionary<double, string> dic = new Dictionary<double, string>();
double highest = double.MinValue;
string result = null;
foreach(double d in dic.keys)
{
if(d > highest)
{
result = dic[d];
highest = d;
}
}
С .Net 3.5:
string lastItem = dic.Values.Last()
string lastKey = dic.Keys.Last()
... но имейте в виду, что словарь не упорядочен, поэтому вы не можете рассчитывать на то, что значения останутся в том же порядке .