2

次のように、ラムダ式を使用して func を定義できます。

Func <int, int, int> Fxy = ( (a,b) => a + b ) );  // Fxy does addition

しかし、ユーザーが実行時にラムダ式の rhs を指定できるようにしたい場合はどうすればよいでしょうか?

String formula_rhs = Console.Readline();
// user enters "a - b"

コーディングしたかのように Fxy を変更できますか

Func <int, int, int> Fxy = ( (a,b) => a - b ) );  // Fxy does what the user wants 
                                                  // (subtraction)

私は現在、自家製の式パーサーを使用して、ユーザー定義の式を受け入れています。.NET を起動したばかりですが、これを行うにはそれほど苦痛ではない方法があるのではないかと感じています。

4

5 に答える 5

1

ncalc フレームワークを試してみてください: http://ncalc.codeplex.com/ 簡単で軽量です。

于 2011-03-23T13:38:35.693 に答える
0

System.Reflection.Emit名前空間は、オンザフライでのコード生成を目的としています。一般的には非常に複雑ですが、減算などの単純な関数に役立つ場合があります。

于 2011-03-28T06:35:48.280 に答える
0

複雑ではない数式を使用する予定がある場合は、JScript エンジンを使用すると簡単に解決できます。

        Microsoft.JScript.Vsa.VsaEngine engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
        MessageBox.Show(Microsoft.JScript.Eval.JScriptEvaluate("((2+3)*5)/2", engine).ToString());

Microsoft.JScriptアセンブリへの参照を追加することを忘れないでください

于 2011-03-28T07:08:20.253 に答える
0

ここでは、 Linq.Expressionsを使用することが考えられます。

あなたの例は次のように翻訳されます:

var a = Expression.Parameter(typeof(int), "a");
var b = Expression.Parameter(typeof(int), "b");
var sum = Expression.Subtract(a, b);
var lamb = Expression.Lambda<Func<int, int, int>>(sum, a, b);
Func<int, int, int> Fxy = lamb.Compile();

もちろん、文字列を正しい式に解析する楽しみがあります。:-)

于 2011-03-28T07:43:57.347 に答える
0

それほど簡単ではありません。このライブラリには、ラムダ式をテキストから Func<> に変換するために使用できる Dynamic Linq 機能がいくつか含まれています。

于 2011-03-23T13:37:06.807 に答える