using System.Collections.Generic;
using CodingSeb.ExpressionEvaluator;
public static void Main()
ExpressionEvaluator evaluator = new ExpressionEvaluator();
evaluator.PreEvaluateVariable += Evaluator_PreEvaluateVariable;
evaluator.PreEvaluateFunction += Evaluator_PreEvaluateFunction;
evaluator.EvaluateVariable += Evaluator_EvaluateVariable;
evaluator.EvaluateFunction += Evaluator_EvaluateFunction;
List<string> expressions = new List<string>()
"GenericNamespace<List<string>>()",
"GenericAssembly<string>"
expressions.ForEach(expression =>
Console.WriteLine(expression);
Console.WriteLine(evaluator.Evaluate(expression));
catch (Exception exception)
Console.WriteLine("throw an exception : " + exception.Message);
Console.WriteLine(string.Empty);
private static void Evaluator_PreEvaluateVariable(object sender, VariablePreEvaluationEventArg e)
if (e.Name.Equals("myvar1"))
else if(e.Name.StartsWith("P"))
e.CancelEvaluation = true;
private static void Evaluator_PreEvaluateFunction(object sender, FunctionPreEvaluationEventArg e)
if(e.Name.Equals("Test") && e.Args.Count == 1)
e.Value = "It is a test for " + e.EvaluateArg(0);
else if(e.Name.StartsWith("A"))
e.CancelEvaluation = true;
private static void Evaluator_EvaluateVariable(object sender, VariableEvaluationEventArg e)
if(e.Name.ToLower().Equals("myvar2"))
else if(e.Name.Equals("MultipliedBy2") && e.This is int)
e.Value = (int)e.This * 2;
else if (e.Name.Equals("GenericAssembly") && e.HasGenericTypes)
e.Value = e.EvaluateGenericTypes()[0].Assembly.GetName().Name;
private static void Evaluator_EvaluateFunction(object sender, FunctionEvaluationEventArg e)
if(e.Name.ToLower().Equals("sayhello") && e.Args.Count == 1)
e.Value = "Hello " + e.EvaluateArg(0);
else if(e.Name.Equals("Add") && e.This is int)
e.Value = (int)e.This + (int)e.EvaluateArg(0);
else if(e.Name.Equals("GenericNamespace") && e.HasGenericTypes)
e.Value = e.EvaluateGenericTypes()[0].Namespace;