4

次のような文字列があるとします。

"if (24 == 24) AND ((true == false) OR (true == true)) AND ('HELLO' != 'WORLD')"

C#/.Net を使用してコードで動的に評価するにはどうすればよいですか?

ユーザーがルールを定義する動的な「ルール エンジン」があります。したがって、ルールは

if (@Number == 24) AND ((@SomeVal1 == false) OR (@SomeVal2 == true)) 
  AND ('@CustomerFirstName' != '@CustomerLastName').  

@ 変数の単純な検索/置換を行い、文字列を評価したいと考えています。

4

5 に答える 5

2

できますが、フープを飛び越えるには多くの時間がかかります。ただし、.net フレームワークには、そのような式を生成してラムダにコンパイルするために使用できる式ツリーがあります。

于 2013-04-24T16:59:22.883 に答える
2

データをコードとして扱うことには、常に重大なリスクが伴うため、これがアプリケーションにもたらすセキュリティへの影響について慎重に検討してください。

C# は通常、このような動的言語ではありませんが、この機能をハックすることができます。 の C# バージョンの例を次に示しますeval

@Femaref が指摘しているように、必要に応じて、式ツリーもオプションになる場合があります。

于 2013-04-24T17:00:33.330 に答える
1

Femarefの答えとは別に、文字列を自分で解釈することもできます。

このようにして、ある種の DSL (ドメイン固有言語) になります。DSL の詳細については、次を参照してください。

ANTLR (DSL を構築するための便利なツール) http://www.antlr.org/wiki/display/ANTLR3/Antlr+3+CSharp+Target

于 2013-04-24T17:01:56.907 に答える
0

あなたがどれほど複雑な式を持っているかわかりません。しかし、ここにあなたの例の式を処理できると思う素敵なライブラリがあります。 http://ncalc.codeplex.com/

于 2013-04-24T17:11:04.030 に答える
0

それを行う簡単な方法はないのではないかと心配しています。文字列を手動で解析してから、リフレクションを使用して @foo 構文で参照される変数、フィールド、またはプロパティを取得するか、ルールを反映するメソッドで動的型を作成することができます。

于 2013-04-24T17:00:17.093 に答える