Как и мы, Session.Add("LoginUserId", 123);
и тогда мы можем получить доступ к Session["LoginUserId"]
, как массив, как мы его реализуем?
Как написать класс, который (например, массив) может быть проиндексирован с помощью 'arr [key]'?
Ответ 1
Вам нужен указатель:
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.
Там также доступно учебное пособие, если вам нужна дополнительная помощь.
Добавление:
Вы упомянули, что хотите, чтобы это было доступно в статическом классе. Это немного усложняется, потому что вы не можете использовать статический указатель. Если вы хотите использовать индекс, вам нужно получить доступ к нему из статического поля или некоторого такого колдовства, как в этом ответе.
Ответ 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, например, элемент ViewBag, доступный для контроллеров в ASP.NET MVC 3:
dynamic expando = new ExpandoObject();
expando.UserId = 5;
var userId = (int) expando.UserId;
Ответ 3
Вы должны использовать индексаторы См. Ссылку: http://msdn.microsoft.com/en-us/library/2549tw02.aspx
Ответ 4
С тем, как вы обычно используете переменную Session, вам действительно нужна общая коллекция словарей, подобная этой. Вам не нужно писать класс. Но если вам нужно добавить дополнительные функции и/или семантику, вы можете, конечно, обернуть коллекцию классом и просто включить и индексировать.
Для других коллекций проверьте пространство имен Collections.Generic.