C#中Matheval自定义函数使用报错:Function XPY does not exist
解决Matheval自定义函数未识别的问题
问题说明
使用Matheval表达式引擎时,已在代码中定义xpy函数,但运行表达式时抛出System.Exception: 'Function XPY does not exist'异常。官网明确支持运行时添加自定义函数,但缺少相关示例。
解决方法
Matheval无法直接识别C#中定义的方法,必须显式将自定义函数注册到表达式引擎中,具体步骤如下:
1. 注册自定义函数
使用Expression类的AddFunction方法,将自定义函数绑定到引擎。该方法需要传入三个参数:函数名、参数数量、处理参数并返回结果的委托。
2. 修改后的完整代码
private double xpy(double x, double y) { return x + y; } ... org.matheval.Expression exp = new org.matheval.Expression(); // 注册自定义函数xpy,指定参数个数为2 exp.AddFunction("xpy", 2, (args) => { double x = Convert.ToDouble(args[0]); double y = Convert.ToDouble(args[1]); return xpy(x, y); }); exp.SetFomular("2 * xpy(a, b)"); exp.Bind("a", 1.2); exp.Bind("b", 0.8); var result = (double)exp.Eval(); // 执行后result值为4.0 ...
关键注意点
- 函数名大小写:Matheval默认不区分函数名大小写,但建议保持注册名与表达式中使用的名称一致,避免混淆。
- 参数类型转换:委托接收的
args是object数组,需要自行转换为对应类型后调用自定义方法。
内容的提问来源于stack exchange,提问作者Cotty
相关产品推荐
相关产品推荐

