像我们一样Session.Add("LoginUserId", 123);
,然后我们可以访问Session["LoginUserId"]
,像一个数组,我们如何实现它?
问问题
15680 次
4 回答
57
你需要一个索引器:
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.
如果您需要更多帮助,还可以使用教程。
附录:
您提到您希望它在静态类上可用。这有点复杂,因为您不能使用静态索引器。如果要使用索引器,则需要从静态字段或此答案中的某些巫术中访问它。
于 2011-07-24T14:13:52.883 回答
2
听起来您只需要一本通用字典。
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,您还可以使用Expando Object,例如 ASP.NET MVC 3 中控制器可用的 ViewBag 成员:
dynamic expando = new ExpandoObject();
expando.UserId = 5;
var userId = (int) expando.UserId;
于 2011-07-24T14:28:17.763 回答
2
您应该使用索引器查看链接:http: //msdn.microsoft.com/en-us/library/2549tw02.aspx
于 2011-07-24T14:47:42.897 回答
0
通过您通常使用 Session 变量的方式,您真正需要的是一个像这样的通用 Dictionary 集合。你真的不需要写一个类。但是如果你需要添加额外的功能和/或语义,你当然可以用一个类来包装集合,只包含和索引器。
对于其他集合,请查看Collections.Generic命名空间。
于 2011-07-24T14:15:56.583 回答