Como hacemos Session.Add("LoginUserId", 123);
y luego podemos acceder Session["LoginUserId"]
, como un arreglo, ¿cómo lo implementamos?¿Cómo escribir una clase que (como una matriz) se puede indexar con `arr [key]`?
Respuesta
Hace falta un programa indexer:
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)
}
}
Esto le permitirá utilizar sus objetos de clase como una matriz:
MyClass cl = new MyClass();
cl["hello"] = anotherObject;
// etc.
También hay un tutorial disponible si necesita más ayuda.
Adición:
Usted menciona que usted quería que esto sea disponible en una clase estática. Eso es un poco más complicado, porque no puedes usar un indexador estático. Si desea utilizar un indexador, deberá acceder a él desde un campo estático o alguna hechicería como en el this answer.
Con la forma en que usualmente usa la variable Session todo lo que realmente necesita es un generic Dictionary collection like this one. Realmente no necesitas escribir una clase. Pero si necesita agregar funcionalidades y/o semánticas adicionales, ciertamente podría envolver la colección con una clase y simplemente incluir e indexar.
Para otras colecciones, consulte el espacio de nombres Collections.Generic.
Quiero una clase simple como Session. Debería poder a) Usar sin crear un objeto, como estático b) Usar el método Agregar para agregar elementos c) acceder al arreglo ¿cómo puedo lograr esto? – Riz
La sesión en este caso * es * un objeto, sin embargo. –
@eFriend, eche un vistazo a mi respuesta para ver cómo lo haría de una manera estática. –
Parece que todo lo que necesita es un generic dictionary.
var session = new Dictionary<string, object>();
//set value
session.Add("key", value);
//get value
var value = session["key"] as string;
Si usted quiere hacer este estática, simplemente que sea un miembro estático en otra clase.
public static class SharedStorage
{
private static Dictionary<string, object> _data = new Dictionary<string,object>();
public static Dictionary<string, object> Data { get { return _data; } }
}
A continuación, se puede acceder a él como tal, sin tener que inicializarlo:
SharedStorage.Data.Add("someKey", "someValue");
string someValue = (string) SharedStorage.Data["someKey"];
Si quieres ser más aventurero y está utilizando .NET 4 también se puede utilizar un Expando Object, como el miembro de ViewBag a disposición de los controladores en ASP.NET MVC 3:
dynamic expando = new ExpandoObject();
expando.UserId = 5;
var userId = (int) expando.UserId;
debe utilizar indexadores Ver el enlace: http://msdn.microsoft.com/en-us/library/2549tw02.aspx
- 1. ¿Es mejor escribir: var arr = []; que var arr = new Array() ;?
- 2. Escribir una clase de C++ que se puede usar como estática, pero necesita un bloqueo
- 3. No se puede utilizar un valor escalar como una matriz
- 4. ¿Cómo escribir una clase segura con contraseña?
- 5. Hacer que un objeto PHP se comporte como una matriz?
- 6. ¿Cómo se puede hacer que una matriz multidimensional sea única?
- 7. Escribir una aplicación que puede usar complementos
- 8. Escribir una función que acepta una expresión lambda como argumento
- 9. ¿Cómo se genera una matriz como JSON?
- 10. ¿Cómo escribir una aserción PHPUnit personalizada que se comporte como una aserción incorporada?
- 11. PHP - usar una matriz constante como clase
- 12. ¿Cómo implementar una navegación con hash-key?
- 13. Cómo indexar una matriz de Tipo anidado en Elasticsearch?
- 14. ¿Se puede usar una clase abstracta como tipo de referencia?
- 15. ¿Cómo se puede ordenar una matriz sin mutar la matriz original?
- 16. Pasar una matriz como argumento a una función en C
- 17. ¿Objeto que actúa como una matriz? (PHP)
- 18. ¿Cómo puedo indexar una matriz 3-D con una máscara 2-D en MATLAB?
- 19. ¿Cómo se puede escribir el código para hacer preferencias compartidas para una matriz en Android?
- 20. ¿Cómo puedo escribir una clase de contenedor genérica que implemente una interfaz dada en C#?
- 21. ¿Cómo se puede contar con una selección como $ ("....: checked")?
- 22. ¿Puede una clase C++ incluirse como miembro?
- 23. ¿Cómo escribir una clase simple en C++?
- 24. ¿Cómo declaro una matriz con una clase personalizada?
- 25. ¿Cómo se puede convertir T en una clase para que coincida con una restricción "donde T: clase"?
- 26. de cómo escribir una matriz en rieles
- 27. ¿Se puede escribir una matriz Byte [] en un archivo en C#?
- 28. En VBA, ¿cómo devolver una matriz/o escribir a las celdas usando una función?
- 29. Una clase que se comporta como @Entity y @Embeddable
- 30. Cómo escribir una clase capaz de foreach
¿por qué no heredar del Diccionario? –
di la forma más básica de hacer lo que él quería. No sé cómo almacena los objetos recolectados, por lo que puede usar cualquier cosa que quiera desde dentro de un indexador. Inheriting from Dictionary solo hará lo que equivale a un alias para un Diccionario de tipos predeterminados a menos que anule los métodos correctos. –
@Jake Basile, ¿Cómo escribo Agregar método? ya diferencia de Indexers, no me gustaría crear su objeto y usarlo como clase estática. – Riz