Session.Add("LoginUserId", 123);
を実行してから、配列のようにSession["LoginUserId"]
にアクセスできるように、どのように実装しますか?
インデクサー が必要です:
public Thing this[string index]
{
get
{
// get the item for that index.
return YourGetItemMethod(index)
}
set
{
// set the item for this index. value will be of type Thing.
YourAddItemMethod(index, value)
}
}
これにより、クラスオブジェクトを配列のように使用できるようになります。
MyClass cl = new MyClass();
cl["hello"] = anotherObject;
// etc.
さらにヘルプが必要な場合は、 チュートリアル も利用できます。
補遺:
これを静的クラスで使用できるようにしたいとおっしゃいました。静的インデクサーを使用できないため、これはもう少し複雑になります。インデクサーを使用する場合は、静的フィールドまたは この回答 のような魔術からインデクサーにアクセスする必要があります。
必要なのは 汎用辞書 だけのようです。
var session = new Dictionary<string, object>();
//set value
session.Add("key", value);
//get value
var value = session["key"] as string;
これをstaticにしたい場合は、別のクラスの静的メンバーにするだけです。
public static class SharedStorage
{
private static Dictionary<string, object> _data = new Dictionary<string,object>();
public static Dictionary<string, object> Data { get { return _data; } }
}
次に、初期化することなく、そのままアクセスできます。
SharedStorage.Data.Add("someKey", "someValue");
string someValue = (string) SharedStorage.Data["someKey"];
より冒険的になりたい場合で、.NET 4を使用している場合は、ASP.NET MVC 3のコントローラーで使用できるViewBagメンバーのように、 Expando Object を使用することもできます。
dynamic expando = new ExpandoObject();
expando.UserId = 5;
var userId = (int) expando.UserId;
インデクサーを使用する必要があります。リンクを参照してください: http://msdn.Microsoft.com/en-us/library/2549tw02.aspx
通常のSession変数の使用方法では、本当に必要なのは このような一般的な辞書コレクション だけです。あなたは本当にクラスを書く必要はありません。ただし、機能やセマンティクスを追加する必要がある場合は、コレクションをクラスでラップし、インデクサーとインデクサーを含めることができます。
他のコレクションについては、 Collections.Generic 名前空間を確認してください。