C# 覆盖NCalc中的“如果”语句
我正在努力理解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<
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();
}