このコードの部分を検討してください。 式の計算方法
int sum = 0;
sum = Expression.Evaluate("1+1");
どこ和の値= 2
私は値を計算する式を持っていますが、私は式はその後、プログラム的に構築し、結果を評価するようにすることを望みます。私は、私が扱うクラスや名前空間が何であるか分かりません。誰でも私を助けることができます。
このコードの部分を検討してください。 式の計算方法
int sum = 0;
sum = Expression.Evaluate("1+1");
どこ和の値= 2
私は値を計算する式を持っていますが、私は式はその後、プログラム的に構築し、結果を評価するようにすることを望みます。私は、私が扱うクラスや名前空間が何であるか分かりません。誰でも私を助けることができます。
あなたは式ツリーを使用することができる:
式ツリーを、 各ノードは、例えば、式でツリー状のデータ構造では、このようなXとしてメソッド呼び出しまたはバイナリ 操作をコードを表します< y。
式ツリーで表されるコードをコンパイルして実行することができます。
注:この問題はSystem.Reflection.Emit
を使用して解決し、MSILを直接操作が、結果として得られるコードは、読み書きが困難であることができます。
少しブラウジングした後、私はあなたがCodePlexに上逃走チェックアウトをお勧め:Fast Lightweight Expression Evaluator:
逃げるには、.NETフレームワークのための表現パーサーと評価です。 は、ランタイムでsqrt(a^2 + b^2)のような文字列式の値を計算できます。これは、カスタムコンパイラ、強く型付けされた式言語、および軽量のcodegenを使用して式 をILに直接コンパイルします。これは、式の評価が非常に速く効率的な であることを意味します。
私はこの長い間、一度http://jint.codeplex.com/を使いました。しかし、これは試作のためだけのものでした。 –
ラムダを使用するか、System.Linq.Expressions名前空間のクラスを使用してプログラムでビルドすることで、式ツリーを構築できます。
詳細はMSDNを参照してください。
http://ncalc.codeplex.comを見ましたか?
これは拡張性があり、高速(独自のキャッシュを持つ)で、EvaluateFunction/EvaluateParameterイベントを処理することで、実行時にカスタム関数と変数を提供できます。例には、それが解析できる式:
Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)");
e.Parameters["Pi2"] = new Expression("Pi * Pi");
e.Parameters["X"] = 10;
e.EvaluateParameter += delegate(string name, ParameterArgs args)
{
if (name == "Pi")
args.Result = 3.14;
};
Debug.Assert(117.07 == e.Evaluate());
また、ユニコード&多くのデータをネイティブに入力し処理します。あなたが文法を変更したいのであれば、それはアンラーファイルが付属しています。新しい機能をロードするためにMEFをサポートするフォークもあります。
また、論理演算子、日付/時刻の文字列、if文もサポートしています。
「値を計算する式があります」。それはあなたが提供したコード断片が期待どおりに機能していることを意味しますか? '私はその表現をプログラム的に構築したいと思う。あなたは入力と出力のような例を提供できますか? – Azodious
この回答はおそらくあなたが探しているものです:http://stackoverflow.com/a/53852/1106671 –
[C#式を動的に評価するにはどうすればいいですか?](http://stackoverflow.com/questions)/53844/how-can-i-evaluate-ac-sharp-expression-dynamically)を使用しています。重複として閉じる投票。それが宿題であれば、助けが必要なものの詳細を記入してください。さもなければ、それは前にすでにカバーされています。 –