【问题标题】:How to add a new function to Ncalc如何向 Ncalc 添加新函数
【发布时间】:2013-09-18 14:43:28
【问题描述】:

我在我的新项目中使用 Ncalc,它已经拥有我需要的几乎所有东西。

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

您知道是否有人已经实现了这些功能?或者你能给我一些扩展Ncalc函数列表的技巧或指南吗???

提前致谢。

【问题讨论】:

    标签: c# expression-evaluation ncalc


    【解决方案1】:

    如果我理解正确:

    我一直在使用它是通过创建一个静态函数

    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

    【讨论】:

    • 您知道是否可以在自定义函数定义中设置自定义错误消息。例如,如果说该函数的参数无效。
    • 我不知道。我会处理这个有例外的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多