2011-02-17 16 views
9

¿Es posible convertir una expresión de cadena en una condición booleana?expresión de cadena C# convert a una expresión booleana

Por ejemplo, me sale el siguiente cadena:

var b = "32 < 45 && 32 > 20" 

me gustaría crear una expresión bool de esto y invocarlo. La representación de cadena también es flexible (para hacerlo más divertido), por lo que permite ||, &&,().

+0

también ven [cómo-puedo-i-evaluar-ac-agudo-expresión-dinámicamente LQ = 1?] (Http: // stackoverflow.com/questions/53844/how-can-i-evaluate-ac-sharp-expression-dynamically?lq=1) – nawfal

Respuesta

4

Usaría Irony, el kit de idioma .NET. Podrías construir una gramática simple con Irony y luego analizar la cadena en un comando ejecutable. Hay un ejemplo digno de una gramática arthmetic en este tutorial y en el Expression Grammar Sample, es una petición bastante común;)

me lo sugieren el uso de un compilador adecuado en lugar de expresiones regulares o un rollo de su propio enfoque - que será mucho más extensible si alguna vez quiere agregar más reglas.

2

Si se sigue todas las reglas de la expresión de C# compilarlo código tan dinámico como por http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm

+0

¿Qué tan rápido es eso? Me imagino que es bastante lento –

+0

No es rápido en absoluto. Básicamente invocas el compilador C#, que emite el IL de la expresión, que luego se envuelve en un método, luego en una clase, luego en un ensamblaje dinámico que se carga en el AppDomain actual, luego invocas el método a través de la reflexión para obtener el resultado de la evaluación. Pero es muy fácil de integrar, si es solo por una prueba de concepto o algo ... –

+0

Sí, sé cómo funciona. Solo quería señalar que sería una forma realmente lenta de hacerlo –

4

Tenga una mirada en Flee (Lightweight Evaluador rápida Expresión) en CodePlex.

1

Si se trata de expresiones matemáticas relativamente simples, una implementación sencilla del shunting-yard algorithm debería ser la solución.

Cuestiones relacionadas