我正在键入一个方程式textbox,它将生成给定抛物线的图形.是否可以使用eval函数?我的C#2010没有microsoft.jscript.
Teo*_*gul 25
C#没有可比较的Eval函数,但创建一个非常简单:
public static double Evaluate(string expression)
{
System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("expression", string.Empty.GetType(), expression);
System.Data.DataRow row = table.NewRow();
table.Rows.Add(row);
return double.Parse((string)row["expression"]);
}
Run Code Online (Sandbox Code Playgroud)
现在简单地称它为:
Console.WriteLine(Evaluate("9 + 5"));
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以使用DataTable类的"Compute"方法轻松完成此操作.
static Double Eval(String expression)
{
System.Data.DataTable table = new System.Data.DataTable();
return Convert.ToDouble(table.Compute(expression, String.Empty));
}
Run Code Online (Sandbox Code Playgroud)
将字符串形式的术语传递给函数以获得结果.
Double result = Eval("7 * 6");
result = Eval("17 + 4");
...
Run Code Online (Sandbox Code Playgroud)
您可以使用 CodeDom 自己创建一个。它会很慢,因为每次调用 Eval 时它都会创建一个新程序集。
public class Program
{
static void Main(string[] args)
{
Console.WriteLine(ExpressionEvaluator.Eval("(2 + 2) * 2"));
}
}
public class ExpressionEvaluator
{
public static double Eval(string expression)
{
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerResults results =
codeProvider
.CompileAssemblyFromSource(new CompilerParameters(), new string[]
{
string.Format(@"
namespace MyAssembly
{{
public class Evaluator
{{
public double Eval()
{{
return {0};
}}
}}
}}
",expression)
});
Assembly assembly = results.CompiledAssembly;
dynamic evaluator =
Activator.CreateInstance(assembly.GetType("MyAssembly.Evaluator"));
return evaluator.Eval();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17185 次 |
| 最近记录: |