Logic Evaluator in c# (Evaluate Logical (&& ,|| ) expressions)
Solution 1
a way without any third party libraries is to use a DataTable with expression.
There you have even the possibility to evaluate on other result value types than just boolean.
System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("", typeof(Boolean));
table.Columns[0].Expression = "true and false or true";
System.Data.DataRow r = table.NewRow();
table.Rows.Add(r);
Boolean result = (Boolean)r[0];
the expression syntax is not identical with your example but it does the same thing. An advantage is that its 100% .NET framework contained --> Microsoft managed. The error handling is not bad neither. Exceptions for missing operators etc...
Solution 2
This is even shorter than the solution given by @fixagon:
System.Data.DataTable table = new System.Data.DataTable();
bool result = (bool)table.Compute("true and false or true", "");
True
,False
,Not
operators, as well as parentheses are allowed.
Sreekumar P
Over the past 9 years, I am working in the field of Software Development. Using technologies Angular5, AngularJS, npm, TypeScript, SASS, ngrx (redux), Nodejs, WebSockets, Figma(UX), RxJS, HTML5, jQuery, RequireJS, Grunt, Bower, Git, Github, LESS, CSS3, Electron, ASP.net, C#.net, WCF, MVC, SQL Server 2016. Have experience in Team handling and Customer (USA) direct communications. LinkedIn Profile: https://www.linkedin.com/in/sreepk/
Updated on June 04, 2022Comments
-
Sreekumar P almost 2 years
In my project there is a
Logic evaluation
section, it take input as a string which containslogical expressions
(true/false
) .I want to evaluate this string and return a final Boolean value.
string Logic="1&0|1&(0&1)" //string Logic="true AND false OR true AND (false AND true)"
This will be my
Logic
. The length might increase.Is there any way to Evaluate this expression from
LINQ / Dynamic LINQ
? -
Sreekumar P over 12 yearsbut this is taking 7 milli seconds... my existing code takes less than 1 milli sec.... i want to reduce this
-
fixagon over 12 yearsi dont think its the most performant option... but has quite some possibilities
-
Teodor Tite over 4 yearsWorks for me (upvote). As an addition: also parentheses are allowed in order to change precedence.