0

C# で作成された辞書に値を割り当てる関数があります。関数内でいくつかの計算が行われた後、ディクショナリは値とキーで構成されます。この辞書をこのセッションに保存するセッションを作成する必要があります。誰でも助けることができますか?

4

1 に答える 1

3

簡単に言えば、 を持っている場合、Dictionary<string, List<int>>それをセッションに入れるのはそれほど複雑ではありません。

Dictionary<string, List<int>> myDict = new Dictionary<string, List<int>>();
HttpContext.Current.Session.Add("MyDictionary", myDict);

セッションに既に辞書が含まれているかどうかを確認し、含まれていない場合にのみ追加する場合は、次のようにします。

if(!HttpContext.Current.Session.ContainsKey("MyDictionary"))
{
    HttpContext.Current.Session.Add("MyDictionary", myDict);
}

それを取得するには、型付けされていないことを覚えておいてSessionください。事実上、文字列、オブジェクトの辞書であるため、キャストする必要があります。

if(HttpContext.Current.Session.ContainsKey("MyDictionary"))
{
    Dictionary<string, List<int>> myDict = HttpContext.Current.Session["MyDictionary"] as Dictionary<string, List<int>>;
}

ただし、このオブジェクトのライフサイクルがどうなるかについても考慮する必要があります。セッションは有効期間が有限であるという点で安定していません。より長い間、別の戦略を検討する必要があるかもしれません。

セッションに関するドキュメントはMSDNに山ほどあり、スタック オーバーフローでも非常に一般的なトピックです。

また、Session はDictionary<String, Object>.Net Framework と IIS によって効果的に管理されるため、次のこともできることを覚えておいてください。

Session["MyValues"] = new List<Int32>();

そしてもちろん、取得時:

List<Int32> myValues = Session["MyValues"] as List<Int32>();

他の代替手段には、キャッシュが含まれます。アプリケーションのすべてのユーザーがオブジェクトを利用できるようにする場合は、これがより良い解決策になる可能性があります。詳細については、この回答を参照してください。

また、質問がローカライズされすぎていると思われるため、質問を閉じることに投票しましたが、私の答えが途中で役立つことを願っています.

于 2012-09-11T08:24:21.143 に答える