【发布时间】:2013-09-18 14:43:28
【问题描述】:
我在我的新项目中使用 Ncalc,它已经拥有我需要的几乎所有东西。
我说的几乎都说了,因为现在我需要扩展一些功能并添加新的功能,例如:nth root,random 等
您知道是否有人已经实现了这些功能?或者你能给我一些扩展Ncalc函数列表的技巧或指南吗???
提前致谢。
【问题讨论】:
标签: c# expression-evaluation ncalc
我在我的新项目中使用 Ncalc,它已经拥有我需要的几乎所有东西。
我说的几乎都说了,因为现在我需要扩展一些功能并添加新的功能,例如:nth root,random 等
您知道是否有人已经实现了这些功能?或者你能给我一些扩展Ncalc函数列表的技巧或指南吗???
提前致谢。
【问题讨论】:
标签: c# expression-evaluation ncalc
如果我理解正确:
我一直在使用它是通过创建一个静态函数
private static void NCalcExtensionFunctions(string name, FunctionArgs functionArgs)
{
if (name == "yourfunctionname")
{
var param1 = functionArgs.Parameters[0].Evaluate();
var param2 = functionArgs.Parameters[1].Evaluate();
//... as many params as you require
functionArgs.Result = (int)param1 * (int)param2; //do your own function logic here
}
if (name == "random")
{
if(functionArgs.Parameters.Count() == 0)
{
functionArgs.Result = new Random().Next();
}
else if(functionArgs.Parameters.Count() == 1)
{
functionArgs.Result = new Random().Next((int)functionArgs.Parameters[0].Evaluate());
}
else
{
functionArgs.Result = new Random().Next((int)functionArgs.Parameters[0].Evaluate(), (int)functionArgs.Parameters[1].Evaluate());
}
}
}
然后你按如下方式使用它
var expr = new Expression("yourfunctionname(3, 2)");
expr.EvaluateFunction += NCalcExtensionFunctions;
var result = expr.Evaluate();
var randExpr = new Expression("random(100)");
randExpr.EvaluateFunction += NCalcExtensionFunctions;
var resultRand = randExpr.Evaluate();
我希望我没有打错任何代码。 NCalc 内置函数列表可以在这里找到:http://ncalc.codeplex.com/wikipage?title=functions&referringTitle=Home
【讨论】: