2011-07-24 7 views

Respuesta

41

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.

+0

¿por qué no heredar del Diccionario ? –

+0

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. –

+0

@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

0

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.

+0

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

+1

La sesión en este caso * es * un objeto, sin embargo. –

+0

@eFriend, eche un vistazo a mi respuesta para ver cómo lo haría de una manera estática. –

2

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; 
Cuestiones relacionadas