1

我有一个复杂的 NCALC if 表达式,如下所示:

if ( {0} == null || {1} == 0 ,{2} * ({3} * {4} + {5}), ({2} * ({3} * {4} + {5}))/{1})

这给了我一些意想不到的错误,如下所示:

在第 1:6 行的 '==' 处缺少 ')'

在第 1:37 行的“UnsetValue”处缺少 EOF

这里有什么问题 - 如果 NCALC 支持 null,我找不到。如果是这样,那么上面的表达式可能有什么问题。请帮忙!!

4

2 回答 2

5

我的经验一直是ncalc不支持null。但是您可以编写自己的函数来评估传入的参数是否有值并返回真/假。

为此,请连接 EvaluateFinction。{下面的小例子)

var exp = new NCalc.Expression("if(HASVALUE([variable], [variable] *2, 0)")
exp.Parameters["variable"] = 2;
exp.EvaluateFunction += SpecRule_EvaluateFunction;


private void SpecRule_EvaluateFunction(string name, NCalc.FunctionArgs args)
{
   switch (name.ToUpper())
   {
       case "HASVALUE":
          if (args.Parameters.Length < 1)
               throw new ArgumentException("IsNull must have at least 1 argument");

             args.Result = args.Parameters[0].Parameters.Values.FirstOrDefault() != null;

             break;
    }
}
于 2017-02-25T07:13:58.550 回答
0

至少现在是 2021 年,您可以将一些选项传递给 NCalc 以允许空值。

Expression e = new Expression(expression, EvaluateOptions.AllowNullParameter);
于 2021-09-24T18:00:41.250 回答