如何向Ncalc添加新功能

时间:2013-09-18 14:43:28

标签: c# expression-evaluation ncalc

我在我的新项目中使用Ncalc,它几乎已经拥有了我需要的一切。

我几乎说了所有内容,因为现在我需要扩展一些功能并添加新功能,例如:nth root,random等等

您知道是否有人已经实施了这些功能吗?或者你能否给我任何提示或指南来扩展Ncalc的功能列表

提前致谢。

1 个答案:

答案 0 :(得分:8)

如果我理解正确:

我使用它的同时是创建一个静态函数

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