C# 如何向Ncalc添加新函数
我正在我的新项目中使用Ncalc,它几乎已经具备了我所需要的一切 我几乎什么都说了,因为现在我需要扩展一些函数,还需要添加新的函数,比如:n次根函数、随机函数等等 你知道有没有人已经实现了这些功能?或者你能给我一些提示或指南来扩展Ncalc的功能列表吗C# 如何向Ncalc添加新函数,c#,expression-evaluation,ncalc,C#,Expression Evaluation,Ncalc,我正在我的新项目中使用Ncalc,它几乎已经具备了我所需要的一切 我几乎什么都说了,因为现在我需要扩展一些函数,还需要添加新的函数,比如:n次根函数、随机函数等等 你知道有没有人已经实现了这些功能?或者你能给我一些提示或指南来扩展Ncalc的功能列表吗 提前感谢。如果我理解正确: 正如我使用它一样,它是通过创建一个静态函数来实现的 private static void NCalcExtensionFunctions(string name, FunctionArgs functionArgs)
提前感谢。如果我理解正确: 正如我使用它一样,它是通过创建一个静态函数来实现的
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内置函数的列表:您知道是否可以在自定义函数定义中设置自定义错误消息吗。例如,如果说参数对该函数无效,我就不知道了。我会处理例外情况。