C# 如何向Ncalc添加新函数

C# 如何向Ncalc添加新函数,c#,expression-evaluation,ncalc,C#,Expression Evaluation,Ncalc,我正在我的新项目中使用Ncalc,它几乎已经具备了我所需要的一切 我几乎什么都说了,因为现在我需要扩展一些函数,还需要添加新的函数,比如:n次根函数、随机函数等等 你知道有没有人已经实现了这些功能?或者你能给我一些提示或指南来扩展Ncalc的功能列表吗 提前感谢。如果我理解正确: 正如我使用它一样,它是通过创建一个静态函数来实现的 private static void NCalcExtensionFunctions(string name, FunctionArgs functionArgs)

我正在我的新项目中使用Ncalc,它几乎已经具备了我所需要的一切

我几乎什么都说了,因为现在我需要扩展一些函数,还需要添加新的函数,比如:n次根函数、随机函数等等

你知道有没有人已经实现了这些功能?或者你能给我一些提示或指南来扩展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内置函数的列表:

您知道是否可以在自定义函数定义中设置自定义错误消息吗。例如,如果说参数对该函数无效,我就不知道了。我会处理例外情况。