2

以下のコードを使用して、キーに応じてディクショナリ オブジェクトの値を更新しようとしています。

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")、何が間違っていますか?

4

1 に答える 1

1

バリューファクトリーについて、ドキュメントは次のように述べています

updateValueFactory 型: System.Func キーの既存の値に基づいて、既存のキーの新しい値を生成するために使用される関数

これは、既存の値を渡すことを意味します。代わりに、新しいもので更新する必要があります。

MyStaticClass.UsersViewModel.AddOrUpdate(userViewModel2.UserSessionStatistic.Id,
                                         userViewModel2, 
                                         (key, oldModel) => userViewModel2);
于 2015-01-30T08:58:26.830 に答える