traduccion que indexadores index example c# .net arrays indexer

c# - indexadores - indexer que es



¿Cómo escribir una clase que(como array) pueda ser indexada con `arr[key]`? (4)

Con la forma en que usualmente usa la variable Session, todo lo que realmente necesita es una colección genérica de diccionarios como esta . Realmente no necesitas escribir una clase. Pero si necesita agregar una funcionalidad adicional y / o una semántica, ciertamente podría envolver la colección con una clase y simplemente incluir un indexador.

Para otras colecciones revisa el espacio de nombres Collections.Generic .

Al igual que hacemos Session.Add("LoginUserId", 123); y luego podemos acceder a la Session["LoginUserId"] , como un Array, ¿cómo lo implementamos?



Necesitas un 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 te permitirá usar tus 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.

Addendum :

Mencionas que querías que esto estuviera disponible en una clase estática. Eso es un poco más complicado, porque no se puede usar un indexador estático. Si desea utilizar un indexador, deberá acceder a él desde un campo estático o algún tipo de hechicería como en esta respuesta .


Suena como todo lo que necesitas es un diccionario genérico .

var session = new Dictionary<string, object>(); //set value session.Add("key", value); //get value var value = session["key"] as string;

Si desea hacer esto estático , simplemente conviértalo en 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; } } }

Luego puedes acceder a él como tal, sin tener que inicializarlo:

SharedStorage.Data.Add("someKey", "someValue"); string someValue = (string) SharedStorage.Data["someKey"];

Si desea ser más aventurero y está utilizando .NET 4, también puede usar un Objeto Expando , como el miembro de ViewBag disponible para los controladores en ASP.NET MVC 3:

dynamic expando = new ExpandoObject(); expando.UserId = 5; var userId = (int) expando.UserId;