Ramstack.ExpressionParser is a flexible expression parser library for .NET, allowing dynamic evaluation and binding of expressions with context-aware support.
To install the Ramstack.ExpressionParser
NuGet package to your project, run the following command:
dotnet add package Ramstack.ExpressionParser
var result = ExpressionParser.Parse("math.min(2 + 3, 2 * 3)");
if (result.Success)
{
var lambda = Expression.Lambda<Func<int>>(result.Value);
var fn = lambda.Compile();
Console.WriteLine(fn());
}
ContextAwareBinder
allows binding expressions to a specific context,
making it possible to reference its properties, fields, and methods directly within expressions.
- The provided context acts as an implicit this, meaning you can access its members without prefixes.
- Case-insensitive binding: identifiers in expressions are resolved in case-insensitive manner (e.g., level, Level, and LEVEL are treated the same).
var parameter = Expression.Parameter(typeof(LogEvent), "logEvent");
var binder = new ContextAwareBinder(parameter);
var result = ExpressionParser.Parse("level == LogLevel.Error && string.IsNullOrEmpty(source)", binder);
var predicate = Expression
.Lambda<Predicate<LogEvent>>(result.Value, parameter)
.Compile();
Here, IsEnabled
evaluates the parsed expression against a LogEvent
instance:
public bool IsEnabled(LogEvent logEvent)
{
return _predicate(logEvent);
}
This makes it easy to create dynamic, human-readable expressions for filtering or evaluating objects at runtime.
Version | |
---|---|
.NET | 6, 7, 8, 9 |
Bug reports and contributions are welcome.
This package is released under the MIT License. See the LICENSE file for details.