C# ConcurrentDictionary-添加或更新问题
我正在使用下面的代码尝试根据dictionary对象的键更新该对象中的值C# ConcurrentDictionary-添加或更新问题,c#,concurrentdictionary,C#,Concurrentdictionary,我正在使用下面的代码尝试根据dictionary对象的键更新该对象中的值 public static ConcurrentDictionary<string, SingleUserStatisticsViewModel> UsersViewModel = new ConcurrentDictionary<string, SingleUserStatisticsViewModel>(); var userSession = new UserSessionStatistic
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);
//尝试更新
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);
但是userViewModel2
中的UsersessionStatistic
对象在ConcurrentDictionary中没有得到更新(它的浏览器属性仍然是“Netscape”
),我做错了什么?关于值工厂,:
MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel.UserSessionStatistic.Id, userViewModel, (key, model) => model);
updateValueFactory类型:System.Func
函数,用于根据
键的现有值
MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel.UserSessionStatistic.Id, userViewModel, (key, model) => model);
这意味着您要将现有值传递给它。您需要将其更新为新的:
MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel.UserSessionStatistic.Id, userViewModel, (key, model) => model);
MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel2.UserSessionStatistic.Id,
userViewModel2,
(key, oldModel) => userViewModel2);
您确定要添加到同一个ConcurrentDictionary吗?(因为MyStaticClass!=信号静态)。看到你的代码,它应该能工作…@Sharped。是的,我是100%舒尔,都一样ConcurrentDictionary@Sharped. 哦,对不起,那只是个打字错误。我把它修好了,那是因为lambda。lambda将旧值作为参数=>(key,oldValue)=>oldValue查看msdn=>