Skip to content

Options

Sébastien Geiser edited this page Mar 27, 2019 · 22 revisions

ExpressionEvaluator has a set of options that can modify the way the evaluator works. Here is the list :

OptionCaseSensitiveEvaluationActive

Type : Boolean
Default value : true

When true : The code evaluation is case sensitive :

Example :

// Works not
abs(-1) + SIN(3 * pi) - cOS(2 * pI)
// Must be written as this
Abs(-1) + Sin(3 * Pi) - Cos(2 * Pi)

When false : The code evaluation is case insensitive :

Example :

// Works
abs(-1) + SIN(3 * pi) - cOS(2 * pI)

OptionForceIntegerNumbersEvaluationsAsDoubleByDefault

Type : Boolean
Default value : false

When true : All numbers without decimal evaluations will be done as double :

Example :

// Equals 0.2
10 / 50

When false : Integers values without decimal and suffixes will be evaluate as int as in C# :

Example :

// Equals 0
10 / 50

Available from version 1.3.5.0

CultureInfoForNumberParsing

Type : CultureInfo
Default value : CultureInfo.CultureInvariant.Clone()

The culture used to evaluate numbers.

Remark : Synchronized with OptionNumberParsingDecimalSeparator and OptionNumberParsingThousandSeparator.
So always set a full CultureInfo object and do not change CultureInfoForNumberParsing.NumberFormat.NumberDecimalSeparator and CultureInfoForNumberParsing.NumberFormat.NumberGroupSeparator properties directly.

Warning if using comma in separators change also OptionFunctionArgumentsSeparator and OptionInitializersSeparator otherwise it will create conflicts Warning it's your responsability to avoid conflicts with operators or other syntax stuff.

Available from version 1.3.4.0

OptionNumberParsingDecimalSeparator

Type : string
Default value : "."

Allow to change the decimal separator of numbers when parsing expressions.

Remark : Modify CultureInfoForNumberParsing

Warning you use comma change also OptionFunctionArgumentsSeparator and OptionInitializersSeparator otherwise it will create conflicts
Warning it's your responsability to avoid conflicts with operators or other syntax stuff.

Available from version 1.3.4.0

OptionNumberParsingThousandSeparator

Type : string
Default value : string.Empty

Allow to change the thousand separator of numbers when parsing expressions.

Warning if you use comma change also OptionFunctionArgumentsSeparator and OptionInitializersSeparator otherwise it will create conflicts
Warning it's your responsability to avoid conflicts with operators or other syntax stuff.

Available from version 1.3.4.0

OptionFunctionArgumentsSeparator

Type : string
Default value : ","

Allow to change the separator of functions arguments.

Warning must to be changed if OptionNumberParsingDecimalSeparator or OptionNumberParsingThousandSeparator are set to "," otherwise it will create conflicts
Warning it's your responsability to avoid conflicts with operators or other syntax stuff.

Available from version 1.3.4.0

OptionInitializersSeparator

Type : string
Default value : ","

Allow to change the separator of Object and collections Initialization between { and } after the keyword new.

Warning must to be changed if OptionNumberParsingDecimalSeparator or OptionNumberParsingThousandSeparator are set to "," otherwise it will create conflicts
Warning it's your responsability to avoid conflicts with operators or other syntax stuff.

Available from version 1.3.4.0

OptionInlineNamespacesEvaluationActive

Type : Boolean
Default value : true

OptionFluidPrefixingActive

Type : Boolean
Default value : true

When true : Allow to prefix void methods with Fluid or Fluent :

Example :

// Works return 3
List("hello", "bye").FluidAdd("test").Count

When false : Disable the functionality :

Example :

// Generate an exception
List("hello", "bye").FluidAdd("test").Count

When true : Allow to use inline namespaces before type (class). you can use it :

  • with new for object creation
  • for casting type
  • for static call on a class
  • for any reference to a type or class for which the namespace is not defined in evaluator.Namespaces.

When false : Disable this functionality. So only the namespaces declared in evaluator.Namespaces are available.

See Inline namespaces

OptionNewFunctionEvaluationActive

Type : Boolean
Default value : true

When true : Allow to create objects with the standard new() function :

Example :

// Works
new(typeof(MyObject))

When false : new as a standard function is forbidden

Example :

// Generate an exception
new(typeof(MyObject))

OptionNewKeywordEvaluationActive

Type : Boolean
Default value : true

When true : Allow to create objects with the new keyword :

Example :

// Works
new MyObject()

When false : new as a keyword is forbidden

Example :

// Generate an exception
new MyObject()

OptionStaticMethodsCallActive

Type : Boolean
Default value : true

When true : Allow to call static methods on classes.

Example :

// Works
string.Format("Hello {0}", name)

When false : Calling static methods is forbidden

Example :

// Generate an exception
string.Format("Hello {0}", name)

OptionStaticProperiesGetActive

Type : Boolean
Default value : true

When true : Allow to get the value of a static property on classes.

Example :

// Works
string.Empty

When false : Getting the value of a static property is forbidden.

Example :

// Generate an exception
string.Empty

OptionInstanceMethodsCallActive

Type : Boolean
Default value : true

When true : Allow to call methods on objects.

Example :

// Works
myvar.ToString()

When false : Calling instance methods is forbidden.

Example :

// Generate an exception
myvar.ToString()

OptionInstanceProperiesGetActive

Type : Boolean
Default value : true

When true : Allow to get the value a property on objects.

Example :

// Works
myStringVar.Length

When false : Getting the value of an instance property is forbidden.

Example :

// Generate an exception
myStringVar.Length

OptionIndexingActive

Type : Boolean
Default value : true

When true : Allow to get the value at a specific index of indexed object (Array, List, Dictionnary ...)

Example :

// Works
myArray[2]
myDictionnary["key"]

When false : Indexing is forbidden.

Example :

// Generate exceptions
myArray[2]
myDictionnary["key"]

OptionStringEvaluationActive

Type : Boolean
Default value : true

When true : Allow double quotes to evaluate string values ("", $"", @"")

Example :

// Works
"Hello"
$"Hello {name}"
@"C:\Windows"

When false : string values are not evaluated

Example :

// Generate exceptions
"Hello"
$"Hello {name}"
@"C:\Windows"

OptionCharEvaluationActive

Type : Boolean
Default value : true

When true : Allow single quotes to evaluate string values ('')

Example :

// Works
'a'
'\n'
','

When false : char values are not evaluated

Example :

// Generate exceptions
'a'
'\n'
','

OptionEvaluateFunctionActive

Type : Boolean
Default value : true

When true : Allow to use the function Evaluate in an expression

Example :

// Works
Evaluate("1+2")

When false : The Evaluate function is blocked. If set to false for security (also ensure that ExpressionEvaluator type is in TypesToBlock list)

Example :

// Generate exceptions
Evaluate("1+2")

OptionVariableAssignationActive

Type : Boolean
Default value : true

When true : Allow to assign a value to a variable in the Variable disctionary with (=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, ++ or --)

Example :

// Works
text = "Hello"
i++

When false : Block the assignation of variables

Example :

// Generate exceptions
text = "Hello"
i++

OptionPropertyOrFieldSetActive

Type : Boolean
Default value : true

When true : Allow to set/modify a property or a field value with (=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, ++ or --)

Example :

// Works
myObject.Text = "Hello"

When false : Block the assignation of fields and properties

Example :

// Generate exceptions
myObject.Text = "Hello"

OptionIndexingAssignationActive

Type : Boolean
Default value : true

When true : Allow to assign a indexed element like Collections, List, Arrays and Dictionaries with (=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, ++ or --)

Example :

// Works
myArray[2] = "Hello"
myDictionnary["key"]++;

When false : Block the assignation of indexed element

Example :

// Generate exceptions
myArray[2] = "Hello"
myDictionnary["key"]++;

OptionScriptEvaluateFunctionActive

Type : Boolean
Default value : true

When true : Allow to use the function ScriptEvaluate in an expression

Example :

// Works
ScriptEvaluate("value = 1+2;\r\nif(value > 2)\r\nreturn \"OK\";\r\nelse\r\nreturn \"NOK\";")

When false : The ScriptEvaluate function is blocked. If set to false for security (also ensure that ExpressionEvaluator type is in [TypesToBlock]((./C%23-Types-Management#Block-access-of-a-some-type) list)

Example :

// Generate exceptions
ScriptEvaluate("value = 1+2;\r\nif(value > 2)\r\nreturn \"OK\";\r\nelse\r\nreturn \"NOK\";")

OptionOnNoReturnKeywordFoundInScriptAction

Type : OptionOnNoReturnKeywordFoundInScriptAction
Default value : ReturnAutomaticallyLastEvaluatedExpression

Set How to react when the keyword return is not found in a script. when using ScriptEvaluate method

When ReturnAutomaticallyLastEvaluatedExpression : Return the last evaluated expression.

Example :

// For script :
x = 1;
y = 2;
x+y;
// return 3

When ReturnNull : Return null

Example :

// For script :
x = 1;
y = 2;
x+y;
// return null

When ThrowSyntaxException : Generate an exception

Example :

// This script generate an exception :
x = 1;
y = 2;
x+y;

Table Of Content

Clone this wiki locally