Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 覆盖NCalc中的“如果”语句_C#_Ncalc - Fatal编程技术网

C# 覆盖NCalc中的“如果”语句

C# 覆盖NCalc中的“如果”语句,c#,ncalc,C#,Ncalc,我正在努力理解NCalc,我有几个问题 1如果我有一个像ifCLOSE这样的表达,我无法理解你想要实现什么,也许如果你能解释得更多,我就能更好地帮助你。如果你不想让if的行为像它的内在一样,那么你不能覆盖if,在表达式中使用if或Filter之类的其他词我的理解是: 1表达式一起解析,然后根据深度进行计算。因此if谓词关闭 List<double> listResult = new List<double>(); for(int index = 0; index<

我正在努力理解NCalc,我有几个问题


1如果我有一个像ifCLOSE这样的表达,我无法理解你想要实现什么,也许如果你能解释得更多,我就能更好地帮助你。如果你不想让if的行为像它的内在一样,那么你不能覆盖if,在表达式中使用if或Filter之类的其他词

我的理解是:

1表达式一起解析,然后根据深度进行计算。因此if谓词关闭
List<double> listResult =  new List<double>();
for(int index = 0; index< listClose.count;index++)
{
    if(listClose[index]<2.3)
         listResult.Add(listROC[index]);
    else
         listResult.Add(listHigh[index]);

}

return listResult;
    private List<double> listOpen = new List<double>();
    private List<double> listClose = new List<double>();
    private List<double> listHigh = new List<double>();
    public void PrepareData()
    {
        for (int index = 0; index < 10; index++)
        {
            Random rnd = new Random();
            double open = rnd.NextDouble() * (2.5 - 2.0) + 2.0;
            listOpen.Add(open);
            double close = rnd.NextDouble() * (2.5 - 2.0) + 2.0;
            listClose.Add(close);
            double high = rnd.NextDouble() * (2.5 - 2.0) + 2.0;
            listHigh.Add(high);

        }
    }
    private void EvaluateExpression()
    {
        PrepareData();

        Expression ex = new Expression("if(CLOSE<2.3,ROC(OPEN),HIGH)");
        ex.EvaluateFunction += delegate(string name, FunctionArgs args)
        {
            if (name == "ROC")
            {
                List<double> listROC = new List<double>();
                string argument = args.Parameters[0].Evaluate().ToString();
                List<double> listParam = new List<double>();
                switch (argument)
                {
                    case "OPEN":
                        listParam = listOpen;
                        break;
                    case "CLOSE":
                        listParam = listClose;
                        break;
                    case "HIGH":
                        listParam = listHigh;
                        break;
                }
                foreach (double dbl in listParam)
                {
                    double result = dbl * 2;
                    listROC.Add(result);
                }
                args.Result = listROC;
            }
            if (name == "if")
            {
               //Override the if function
            }
        };

        object ob = ex.Evaluate();
    }