że mamy ciągi typu:Jak przekonwertować ciąg znaków na obiekt BinaryExpression?
string s1 = "a < 5";
string s2 = "b >= 7";
string s3 = "c <= 8";
...
chcę przekonwertować te ciągi do BinaryExpression obiekty podobne do tego, co możemy uzyskać stosując:
BinaryExpression b1 = Expression.MakeBinary(ExpressionType.LessThan, Expression.Parameter(typeof(int), "a"), Expression.Constant(5, typeof(int)));
BinaryExpression b2 = Expression.MakeBinary(ExpressionType.GreaterThanOrEqual, Expression.Parameter(typeof(int), "b"), Expression.Constant(7, typeof(int)));
BinaryExpression b3 = Expression.MakeBinary(ExpressionType.LessThanOrEqual, Expression.Parameter(typeof(int), "c"), Expression.Constant(8, typeof(int)));
stworzyłem poniższą metodę:
BinaryExpression ConvertStringToBinaryExpression(string exp)
{
string[] s = exp.Split(' ');
string param = s[ 0 ];
string comparison = s[ 1 ];
int constant = int.Parse(s[ 2 ]);
if (comparison == "<")
return Expression.MakeBinary(ExpressionType.LessThan, Expression.Parameter(typeof (int), param), Expression.Constant(constant, typeof (int)));
else if (comparison == "<=")
return Expression.MakeBinary(ExpressionType.LessThanOrEqual, Expression.Parameter(typeof (int), param), Expression.Constant(constant, typeof (int)));
else if (comparison == ">")
return Expression.MakeBinary(ExpressionType.GreaterThan, Expression.Parameter(typeof (int), param), Expression.Constant(constant, typeof (int)));
else if (comparison == ">=")
return Expression.MakeBinary(ExpressionType.GreaterThanOrEqual, Expression.Parameter(typeof (int), param), Expression.Constant(constant, typeof (int)));
else
throw new ArgumentException("Invalid expression.", "exp");
}
Jednak powyższa metoda nie działa poprawnie, jeśli na przykład mamy ciągi takie jak:
string s4 = "a< 5" // no space between 'a' and '<'
string s5 = "b>=9" // no space at all
string s6 = "c <=7" // no space betwen '<=' and '7'
Jaki jest najprostszy sposób, aby był bardziej solidny i niezawodny?
będziesz używać tylko>, <,=,<=,> =, =>, =
@KrishanuDey: yes –