C# c语言中的辛普森用户定义函数#

C# c语言中的辛普森用户定义函数#,c#,.net,winforms,math,symbolic-math,C#,.net,Winforms,Math,Symbolic Math,如何在c#中获取用户定义函数。函数以字符串形式从文本框中获取,并以双精度传递给此函数 Simpson(Func<double, double> f, double a, double b, int pointsNum) Simpson(函数f,双a,双b,int pointsNum) e、 gFunc f=x=>Math.Cos(x) 我硬编码这个。 但我怎样才能从文本框中获取它呢 根据功能的复杂性,这可能是一项简单的任务,也可能是一项复杂的任务。如果您允许用户只使用几个简单的运

如何在c#中获取用户定义函数。函数以字符串形式从文本框中获取,并以双精度传递给此函数

Simpson(Func<double, double> f, double a, double b, int pointsNum)
Simpson(函数f,双a,双b,int pointsNum)
e、 g
Func f=x=>Math.Cos(x)

我硬编码这个。
但我怎样才能从文本框中获取它呢

根据功能的复杂性,这可能是一项简单的任务,也可能是一项复杂的任务。如果您允许用户只使用几个简单的运算符(+、-、/、%和基本数学函数(定义的函数数),那么您可以创建一个解析器,解析函数代码,然后执行它。但这将是非常有限的,就像一个简单的计算器

如果你想让用户做复杂的事情,那么你需要用C#编程编译代码。有一个
CSharpCodeProvider
类-请看一看


有一个
System.CodeDom
名称空间有很好的文档记录,它定义的类型可以表示源代码的逻辑结构,独立于特定的编程语言。在MSDN和Google中搜索它。你应该在谷歌上搜索
C#动态代码编译

不容易。您要求将纯语法的东西(并在编译时替换)变成动态的。有很多方法可以动态地获得结果,但我不相信你可以作为委托(Func
是委托)返回来传递结果。如果你对用户输入函数使用的语言不太清楚,动态语言运行库(DLR)可能会很有用。它具有动态运行的功能,例如运行时加载的Python代码。使用字典、解析器或运行时编译代码。取决于需要支持表达式、性能和