Duda poco comun...

06/01/2006 - 19:19 por Michel | Informe spam
Hola, saludos a todo, tengo una duda bien grande, que me ha dejado pensando
gran parte del dia:
Aqui les explico un poco mas:
supongamos que tengo una clase:

public Class ClassName
{
protected string var1;
protected string var2;
protected string var3;
.
.
.
.
.
}


Ahora en algun lugar de mi codigo tengo un Objeto de tipo ClassName.

Y por otro lado tengo una especie de iterador que contiene strings
(casualmente los mismos nombres de las variables)...
y quisiera saber si es pocible "evaluar" ese objeto en esas cadenas com si
fueran las variables..
algo asi:
ClassName object = new ClassName(...)

for each Iterador.Item
object.[Iterador.Item.Name] = Iterador.Item.value;
seria cmo evaluar(Object, Iterador.Item.Name)

Donde Iterador.Item.Name = var1, var2, var3... (pero como string)...
Existe alguna forma de hacer esto, no se si me explico, si alguien me
pudiera ayudar..
Gracias a todos.
Michel

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
06/01/2006 - 20:30 | Informe spam
Michel,

Con un poco de esfuerzo, creo que puedes programar lo que quieres usando
Reflection.
En particular, si haces:

FieldInfo[] campos = objeto.GetType().GetFields();

obtendrás un array con todos los campos del objeto 'objeto'.

http://msdn.microsoft.com/library/d...sTopic.asp

Para cada uno de esos campos podrás tanto obtener como modificar su valor:

http://msdn.microsoft.com/library/s...etopic.asp

Slds - Octavio


"Michel" escribió en el mensaje
news:
Hola, saludos a todo, tengo una duda bien grande, que me ha dejado
pensando gran parte del dia:
Aqui les explico un poco mas:
supongamos que tengo una clase:

public Class ClassName
{
protected string var1;
protected string var2;
protected string var3;
.
.
.
.
.
}


Ahora en algun lugar de mi codigo tengo un Objeto de tipo ClassName.

Y por otro lado tengo una especie de iterador que contiene strings
(casualmente los mismos nombres de las variables)...
y quisiera saber si es pocible "evaluar" ese objeto en esas cadenas com si
fueran las variables..
algo asi:
ClassName object = new ClassName(...)

for each Iterador.Item
object.[Iterador.Item.Name] = Iterador.Item.value;
seria cmo evaluar(Object, Iterador.Item.Name)

Donde Iterador.Item.Name = var1, var2, var3... (pero como string)...
Existe alguna forma de hacer esto, no se si me explico, si alguien me
pudiera ayudar..
Gracias a todos.
Michel



Respuesta Responder a este mensaje
#2 Michel
06/01/2006 - 21:03 | Informe spam
Gracias Octavio, lo leere ahora mismo
SAludos.
Michel
"Octavio Hernandez" wrote in message
news:%
Michel,

Con un poco de esfuerzo, creo que puedes programar lo que quieres usando
Reflection.
En particular, si haces:

FieldInfo[] campos = objeto.GetType().GetFields();

obtendrás un array con todos los campos del objeto 'objeto'.


http://msdn.microsoft.com/library/d...sTopic.asp

Para cada uno de esos campos podrás tanto obtener como modificar su valor:

http://msdn.microsoft.com/library/s...etopic.asp

Slds - Octavio


"Michel" escribió en el mensaje
news:
Hola, saludos a todo, tengo una duda bien grande, que me ha dejado
pensando gran parte del dia:
Aqui les explico un poco mas:
supongamos que tengo una clase:

public Class ClassName
{
protected string var1;
protected string var2;
protected string var3;
.
.
.
.
.
}


Ahora en algun lugar de mi codigo tengo un Objeto de tipo ClassName.

Y por otro lado tengo una especie de iterador que contiene strings
(casualmente los mismos nombres de las variables)...
y quisiera saber si es pocible "evaluar" ese objeto en esas cadenas com
si fueran las variables..
algo asi:
ClassName object = new ClassName(...)

for each Iterador.Item
object.[Iterador.Item.Name] = Iterador.Item.value;
seria cmo evaluar(Object, Iterador.Item.Name)

Donde Iterador.Item.Name = var1, var2, var3... (pero como string)...
Existe alguna forma de hacer esto, no se si me explico, si alguien me
pudiera ayudar..
Gracias a todos.
Michel







Respuesta Responder a este mensaje
#3 José Escrich
06/01/2006 - 21:05 | Informe spam
Michel, aca tienes, en el ejemplo que te arme tienes que implementar un objeto
que herede de CustomIndexedObject y luego ponerle a tus miembros el atributo
IndexedMember, aunque esto lo puedes recortar ;), es como un plus!...

saludos, espero te sirva... si tienes duda sobre el código no dudes en volver
a consultar.

using System;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{

StrangeObject strangeObject = new StrangeObject();
strangeObject["var1"] = "hello world ;)";
Console.WriteLine(strangeObject["var1"]);
Console.WriteLine("Press enter to end.");
Console.ReadLine();
}
}

public class StrangeObject : CustomIndexedObject
{
[IndexedMember]
public string var1;

protected string var2;
protected string var3;
}

public class CustomIndexedObject
{
public object this[string index]
{
get { return GetMemberValue(index); }
set { SetMemberValue(index, value); }
}

private void SetMemberValue(string index, object value)
{
if (IsIndexedMember(index))
this.GetType().InvokeMember(index, BindingFlags.SetField,
null, this, new object[] { value });
else
throw new Exception("Unable to find an member that can be
access by index");
}

private object GetMemberValue(string index)
{
if (IsIndexedMember(index))
return this.GetType().InvokeMember(index, BindingFlags.GetField,
null, this, null);
else
throw new Exception("Unable to find an member that can be
access by index");
}

private bool IsIndexedMember(string index)
{
MemberInfo[] memberInfos = this.GetType().GetMember(index);

if (memberInfos.Length > 1)
throw new Exception("More than one coincidence");
else
return Attribute.IsDefined((MemberInfo)memberInfos.GetValue(0),
typeof(IndexedMember));
}
}

public class IndexedMember : Attribute
{

}
}



José Escrich
jescrich (a) gmail.com
http://latincoder.com

M> Hola, saludos a todo, tengo una duda bien grande, que me ha dejado
M> pensando
M> gran parte del dia:
M> Aqui les explico un poco mas:
M> supongamos que tengo una clase:
M> public Class ClassName
M> {
M> protected string var1;
M> protected string var2;
M> protected string var3;
M> .
M> .
M> .
M> .
M> .
M> }
M> Ahora en algun lugar de mi codigo tengo un Objeto de tipo ClassName.
M>
M> Y por otro lado tengo una especie de iterador que contiene strings
M> (casualmente los mismos nombres de las variables)...
M> y quisiera saber si es pocible "evaluar" ese objeto en esas cadenas
M> com si
M> fueran las variables..
M> algo asi:
M> ClassName object = new ClassName(...)
M> for each Iterador.Item
M> object.[Iterador.Item.Name] = Iterador.Item.value;
M> seria cmo evaluar(Object, Iterador.Item.Name)
M>
M> Donde Iterador.Item.Name = var1, var2, var3... (pero como string)...
M> Existe alguna forma de hacer esto, no se si me explico, si alguien me
M> pudiera ayudar..
M> Gracias a todos.
M> Michel
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida