de cadena a booleano

10/10/2007 - 11:06 por Vicente García | Informe spam
Hola,

Tengo en una base de datos datos en un campo STRING datos del estilo "a >
100" o "a > b". En mi aplicación obtengo esa cadena de la base de datos y
quiero leer esos datos y escribir una condición del tipo: if (a > 100) o
if(a > b) pero no sé como evaluar esa cadena ya que dice que no se puede
evaluar la cadena como una condición. Si lo convierto a BOOLEAN sigue dando
error, aunque esta vez de ejecución. Las variables a y b estaría definidas
en el programa previamente. Es decir, lo que quiero es evaluar la condición
que se representa en una cadena de texto. ¿Se podrá hacer?

Muchísimas gracias
Vicente.
 

Leer las respuestas

#1 Alberto Poblacion
10/10/2007 - 11:28 | Informe spam
"Vicente García" wrote in message
news:
Tengo en una base de datos datos en un campo STRING datos del estilo "a >
100" o "a > b". En mi aplicación obtengo esa cadena de la base de datos y
quiero leer esos datos y escribir una condición del tipo: if (a > 100) o
if(a > b) pero no sé como evaluar esa cadena ya que dice que no se puede
evaluar la cadena como una condición. Si lo convierto a BOOLEAN sigue
dando error, aunque esta vez de ejecución. Las variables a y b estaría
definidas en el programa previamente. Es decir, lo que quiero es evaluar
la condición que se representa en una cadena de texto. ¿Se podrá hacer?



Se puede hacer pero no es nada fácil. A diferencia de otros lenguajes en
los que tienes una función de tipo EVAL o similar, a la que le pasas una
expresión y te la evalúa, en C# no hay nada parecido. Para implementarlo
tienes dos opciones:

1) Escribir la expresión como si fuera un fragmento de programa en C#,
compilarla en memoria (con la clase CSharpCompiler), cargarla y ejecutarla.
Si necesitas que acceda a las variables tales como a y b que están en tu
programa, la cosa se complica un poquillo porque tendrás que hacérselas
llegar de alguna manera.

2) Escribir un analizador e intérprete de expresiones dentro de tu propio
código. La complejidad de esta tarea depende de qué tipos de expresiones
vayas a admitir. Si solo son del tipo a>constante o a>b es relativamente
fácil, pero si quieres cualquier expresión genérica se empieza a complicar
la cosa.

De ambos métodos hay multitud de ejemplos en la red. Por ejemplo, si te
vas a www.codeproject.com y haces una búsqueda con las palabras "evaluate
expression" te saldrán varias docenas de artículos con código fuente
incluido.

Preguntas similares