2012-12-17 86 views
0

可能重複:
How can I evaluate a C# expression dynamically?如何創建動態數學函數?

我可以做到這一點;

int x = 6; 
var result = new DataTable().Compute(x + " * 10/3", null); 

而這;

public delegate double function(double x); 
function func = delegate(double x) { return x * 10/3; }; 

那麼我如何計算像第一個例子,並將它分配給第二個例子的委託?

目標是做計算工作只有一次,然後用它與許多變量。

+2

的可能重複的[I如何動態評估C#表達?](http://stackoverflow.com/questions/53844/how-can-i-evaluate-ac-sharp-expression-dynamically )和[c#轉換字符串表達式爲布爾表達式](http://stackoverflow.com/questions/5029699/c-sharp-convert-string-expression-to-a-boolean-expression) –

+0

你想要一個內聯委託和不只是一個類方法? –

回答

1

我會使用NCalc這些類型的要求。例如

NCalc.Expression expr = new NCalc.Expression("x * 10/3"); 
expr.EvaluateParameter += (name, args) => 
    { 
     if (name == "x" && somecondition == 1) args.Result = 6; 
     if (name == "x" && somecondition == 2) args.Result = 12; 
    }; 
var result = expr.Evaluate(); 
0

你只需要創建你的方法(匿名或不是),利用DataTable.Compute

Func<double, double> function = x => 
    (double)(new DataTable().Compute(x + " * 10/3", null));