我使用下面的代码试图根据字典对象的键更新它的值。
public static ConcurrentDictionary<string, SingleUserStatisticsViewModel> UsersViewModel = new ConcurrentDictionary<string, SingleUserStatisticsViewModel>();
var userSession = new UserSessionStatistic()
{
Id = "12345", Browser = "Netscape"
};
var userViewModel = new SingleUserStatisticsViewModel()
{
UserSessionStatistic = userSession,
StartTime = DateTime.Now
};//添加第一次
MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel.UserSessionStatistic.Id, userViewModel, (key, model) => model);//尝试更新
var userSession2 = new UserSessionStatistic()
{
Id = "12345",
Browser = "not getting updated????"
};
var userViewModel2 = new SingleUserStatisticsViewModel()
{
UserSessionStatistic = userSession2,
StartTime = DateTime.Now
};
MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel2.UserSessionStatistic.Id, userViewModel2, (key, model) => model);但是,UsersessionStatistic对象在userViewModel2中并没有在ConcurrentDictionary中得到更新(它的浏览器属性仍然说明了"Netscape"),我做错了什么?
发布于 2015-01-30 08:58:26
关于价值工厂,医生说
updateValueFactory类型: System.Func :用于根据密钥的现有值为现有密钥生成新值的函数
这意味着你把现有的价值传递给它。您需要用新的更新来更新它:
MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel2.UserSessionStatistic.Id,
userViewModel2,
(key, oldModel) => userViewModel2);https://stackoverflow.com/questions/28231986
复制相似问题