ExpressionEvaluator
ExpressionEvaluator copied to clipboard
Nested false inside true `if` causing result to set to null.
My original where I discovered the issue was more complex, but I distilled it down to the simplest reproducible case I could find which I've placed in this fiddle: https://dotnetfiddle.net/9NzZ0O
Note the final script which produces a null
result when untyped, and throws a null reference exception when a type is supplied.
Hello @Xjph, sorry for my late response.
Need to investigate a bit.
But for now you can easily manage it by returning theresult
variable each times after if blocks:
--------------------------------------------
result = 0;
if (true)
{
if (true)
{
result = 1;
}
}
return result;
---------------- Result --------------------
No type:1
With type:1
--------------------------------------------
result = 0;
if (false)
{
if (false)
{
result = 1;
}
}
return result;
---------------- Result --------------------
No type:0
With type:0
--------------------------------------------
result = 0;
if (false)
{
if (true)
{
result = 1;
}
}
return result;
---------------- Result --------------------
No type:0
With type:0
--------------------------------------------
result = 0;
if (true)
{
if (false)
{
result = 1;
}
}
return result;
---------------- Result --------------------
No type:0
With type:0
or simpler : with evaluator.OptionScriptNeedSemicolonAtTheEndOfLastExpression = false;
--------------------------------------------
result = 0;
if (true)
{
if (true)
{
result = 1;
}
}
result
---------------- Result --------------------
No type:1
With type:1
--------------------------------------------
result = 0;
if (false)
{
if (false)
{
result = 1;
}
}
result
---------------- Result --------------------
No type:0
With type:0
--------------------------------------------
result = 0;
if (false)
{
if (true)
{
result = 1;
}
}
result
---------------- Result --------------------
No type:0
With type:0
--------------------------------------------
result = 0;
if (true)
{
if (false)
{
result = 1;
}
}
result
---------------- Result --------------------
No type:0
With type:0
The explicit return
is an acceptable workaround for my use case, so certainly no need to rush on this as far as I'm concerned.
Thanks for your time!