Estoy buscando una forma de obtener un valor booleano de una cadena.
Tengo una cadena, almacenada en una base de datos, que es una condición con la que se debe probar. supongamos que la cadena = "[número] <10000" En mi código, planeo reemplazar [número] con un número real para que la cadena se convierta en "100 <10000".
¿Existe una forma sencilla de evaluar esta cadena a un booleano? En este caso sería Falso.
Otro ejemplo: "[número]> 100 && [número] <1000" Si el número fuera 200, la evaluación sería Verdadera.
¿Qué pasa si agrego código a esta condición, como "if ([número]> 100 && [número] <1000) {return true;} else {return false;}"
¿Si hay una forma sencilla de obtener el valor de retorno de esta cadena con código?
2 respuestas
Puede hacer uso de la clase DynamicExpression , está disponible en este paquete nuget. Puede evaluar expresiones sobre la marcha.
A continuación hay un ejemplo,
var expression = System.Linq.Dynamic.DynamicExpression.ParseLambda(
new System.Linq.Expressions.ParameterExpression[] { },
typeof(bool),
"100 > 1000",
new object[] { });
var compiledDelegate = expression.Compile();
var result = compiledDelegate.DynamicInvoke(null);
El resultado será falso ya que la expresión proporcionada "100> 1000" es falsa.
Si necesita más control, debe crear expresiones en función de cadenas dinámicas que representen operaciones lógicas. Por ejemplo, he tomado su primer caso de "[number]<1000"
. Puede probar a continuación:
static void Main(string[] args)
{
string code = "[number] < 10000".Replace("[number]", "100");
string[] operands = code.Split('<');
var comparison = Expression.LessThan(
Expression.Constant(operands[0]),
Expression.Constant(operands[1]));
var lambda = Expression.Lambda<Func<bool>>(comparison).Compile();
bool result = lambda();
}
O alternativamente, puede usar bibliotecas existentes o paquetes nuget para hacer lo mismo de una manera más simple (aunque bajo el capó hacen lo mismo) :
string code = "[number] < 10000".Replace("[number]", "100");
func = ExpressionParser.Compile<Func<bool>>(code);
bool result = func()
Hace uso del analizador Lambda como se muestra aquí
Nuevas preguntas
c#
C # (pronunciado "see sharp") es un lenguaje de programación multi-paradigma de alto nivel, estáticamente tipado desarrollado por Microsoft. El código C # generalmente se dirige a la familia de herramientas y tiempos de ejecución .NET de Microsoft, que incluyen .NET Framework, .NET Core y Xamarin, entre otros. Use esta etiqueta para preguntas sobre el código escrito en las especificaciones formales de C # o C #.