Я не уверен, как написать func
часть метода ConcurrentDictionary.AddOrUpdate
, который должен проверить, UpdatedOn
свойство UpdatedOn
существующее значение/значение.
Учитывая следующий POCO, как я могу использовать.NET ConcurrentDictionary.AddOrUpdate
для обновления элемента в словаре (если он существует), когда новый элемент имеет значение DateTime, которое БОЛЬШЕ, чем существующее... иначе оно просто добавляет его,
(код pseduo)
var results = new ConcurrentDictionary<string, Foo>();
public class Foo
{
string Id;
string Name;
string Whatever;
DateTime UpdatedOn;
}
Я смотрел на второй перегруженный метод (AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
), и я просто не знаю, как сделать часть Func
метода.
Ожидается, что в рассматриваемом функциональном параметре будет введен ключ и уже существующее значение для этого ключа и вернуть значение, которое должно храниться в словаре для этого самого ключа.
Поэтому, если вы хотите обновить существующее значение, просто создайте функцию, которая обновляет значение и возвращает его вместо нового.
Вот полный пример:
var d = new ConcurrentDictionary<string, Foo>();
// an example value
var original_value = new Foo {UpdatedOn = new DateTime(1990, 1, 1)};
d.TryAdd("0", original_value);
var newValue = new Foo {UpdatedOn = new DateTime(2000, 1, 1)};
// try to add the newValue with the same key
d.AddOrUpdate("0",
newValue,
(key, old_value) => {
// if the DateTime value is greater,
// then update the existing value
if (newValue.UpdatedOn > old_value.UpdatedOn)
old_value.UpdatedOn = newValue.UpdatedOn;
// return old_value, since it should be updated
// instead of being replaced
return old_value;
});
d
теперь будет содержать только оригинальный элемент с UpdatedOn
обновлен до 2000-1-1.