Cargar variables dinámicamente

20/04/2004 - 13:04 por Germán | Informe spam
Tengo una serie de variables definidas en un formulario:

public class
{

private int NM_ACCESOS = 0;

private const int NM_INTENTOS = 0;
ó
private readonly int NM_INTENTOS = 0;

}

Por reflexión accedo a los campos Field del formulario
y establezco un valor, algo así:

public static void AsignarValor(FieldInfo campoField,
object o, object valor)
{
// Valor Campo Field del objeto
object valorField = campoField.GetValue(o);

if (valorField != null)
{
campoField.SetValue(o, valor);
}

El caso que para

private const int NM_INTENTOS = 0;

me da el error

"No se puede establecer un campo final."

La cuestión es que no se puede asignar un valor aun const
o readonly, entonces a partir de un Field cómo puedo
saber que es un const o readonly ?


Otra cosa

// Valor Campo Field del objeto
object valorField = campoField.GetValue(o);

me devuelve el valor de la variable para

private int NM_ACCESOS = 0;

pero si fuera algo así

private TextBox DS_NOMBRE;

qué me devolvería entonces ?.

Muchos saludos.

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo
20/04/2004 - 15:23 | Informe spam
1. Una vez que tienes el elemento, la clase FieldInfo tiene una propiedad
IsLiteral que indica si el campo corresponde a un valor constante o no.

2. Te retorna una referencia al objeto apuntado por la variable DS_NOMBRE,
en otras palabras, una referencia al Textbox (si ese campo tuviera asignado
uno, claro)

Saludos
Pedro Luna
Gye, Ecu





"Germán" escribió en el mensaje
news:17c101c426c7$4a7697d0$

Tengo una serie de variables definidas en un formulario:

public class
{

private int NM_ACCESOS = 0;

private const int NM_INTENTOS = 0;
ó
private readonly int NM_INTENTOS = 0;

}

Por reflexión accedo a los campos Field del formulario
y establezco un valor, algo así:

public static void AsignarValor(FieldInfo campoField,
object o, object valor)
{
// Valor Campo Field del objeto
object valorField = campoField.GetValue(o);

if (valorField != null)
{
campoField.SetValue(o, valor);
}

El caso que para

private const int NM_INTENTOS = 0;

me da el error

"No se puede establecer un campo final."

La cuestión es que no se puede asignar un valor aun const
o readonly, entonces a partir de un Field cómo puedo
saber que es un const o readonly ?


Otra cosa

// Valor Campo Field del objeto
object valorField = campoField.GetValue(o);

me devuelve el valor de la variable para

private int NM_ACCESOS = 0;

pero si fuera algo así

private TextBox DS_NOMBRE;

qué me devolvería entonces ?.

Muchos saludos.
Respuesta Responder a este mensaje
#2 Anonimo
20/04/2004 - 15:54 | Informe spam
1. Una vez que tienes el elemento, la clase FieldInfo


tiene una propiedad
IsLiteral que indica si el campo corresponde a un valor


constante o no.

Para
private readonly int NM_INTENTOS = 0;

existe FieldInfo.IsInitOnly no??

El caso que para readonly

campoField.SetValue(o, valor);

debería fallar no?, o no falla y no cambiar valor pues no
se puede cambiar valor de un readonly, solo en la
inicialización de su valor (una única vez) ?

(Lo probé y no me ha fallado, pero no estoy seguro del
todo)

Saludos y gracias por las aclaraciones.
Respuesta Responder a este mensaje
#3 Anonimo
20/04/2004 - 16:09 | Informe spam
HOla de nuevo,

siguiendo con el ejemplo que comenté...

private readonly int NM_ACCESOS = 0;


En el método que accede al FieldInfo:

Console.WriteLine(" Field " + campoField.Name);

// Const
Console.WriteLine("Literal ? " + campoField.IsLiteral);
// readonly
Console.WriteLine("Literal ? " + campoField.IsInitOnly);



campoField.SetValue(o, valorControl);
if (campoField.Name == "NM_ACCESOS")
{
campoField.SetValue(o, 1);
campoField.SetValue(o, 2);
campoField.SetValue(o, 3);
}

Al campo Readonly le cambio el valor 3 veces !!! cuando
creo que un readonly no se podía...cómo es posible esto o
yo estoy equivocado ?

Gracias al grupo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida