如何在NCALC的IF表达式中处理null

时间:2017-01-25 12:41:57

标签: ncalc

我有一个复杂的NCALC如果表达式是这样的:

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

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

  

缺少')' at' =='在第1:6行

     

在'UnsetValue'中失去了EOF。在第1:37行

这里的问题 - 如果NCALC支持null,我无法找到。如果确实如此,那么上面的表达式可能会出错。请帮助!!

1 个答案:

答案 0 :(得分:2)

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

为此,请连接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;
    }
}