私たちと同じように、配列のように にSession.Add("LoginUserId", 123);
アクセスできます。それをどのように実装すればよいでしょうか?Session["LoginUserId"]
4 に答える
インデクサーが必要です:
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;
これを静的にしたい場合は、別のクラスの静的メンバーにするだけです。
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.NETMVC3のコントローラーで使用できるViewBagメンバーなどのExpandoオブジェクトを使用することもできます。
dynamic expando = new ExpandoObject();
expando.UserId = 5;
var userId = (int) expando.UserId;
インデクサーを使用する必要があります。リンクを参照してください: http://msdn.microsoft.com/en-us/library/2549tw02.aspx
通常のSession変数の使用方法では、本当に必要なのは、このような一般的なディクショナリコレクションだけです。クラスを書く必要はありません。ただし、機能やセマンティクスを追加する必要がある場合は、コレクションをクラスでラップし、インデクサーとインデクサーを含めることができます。
他のコレクションについては、 Collections.Generic名前空間を確認してください。