Table of Contents

Case Sensitivity

Functions and Parameters

By default, the evaluation process is case-sensitive. This means every parameter and function evaluation will match with case sensitivity. This behavior can be overriden for both using a IDictionary implementation with a custom StringComparer.

Case-insensitive function

var expression = new Expression("secretOperation()")
{
    Context =
    {
        Functions = new Dictionary<string, ExpressionFunction>(StringComparer.InvariantCultureIgnoreCase)
        {
            { "SecretOperation", _ => 42 }
        }
    }
};

Case-insensitive parameter

var expression = new Expression("name == 'Beatriz'")
{
    Parameters = new Dictionary<string, object>(StringComparer.InvariantCultureIgnoreCase)
    {
        { "Name", "Beatriz" }
    }
};

Case-insensitive built-in function

var configuration = new ExpressionConfiguration
{
    Evaluation = new ExpressionEvaluationOptions
    {
        IgnoreCaseAtBuiltInFunctions = true
    }
};

var expression = new Expression("aBs(-1)", configuration);

String Comparison

You can also change the comparison of string values using StringComparer.

var expression = new Expression("{PageState} == 'list'");
expression.Parameters["PageState"] = "List";
Debug.Assert(false, expression.Evaluate());

var configuration = new ExpressionConfiguration
{
    Evaluation = new ExpressionEvaluationOptions
    {
        StringComparer = StringComparer.CurrentCultureIgnoreCase
    }
};

expression = new Expression("{PageState} == 'list'", configuration);
expression.Parameters["PageState"] = "List";
Debug.Assert(true, expression.Evaluate());