質問

Expressionとは何ですか<> C#で使用されていますか? Expression<>をオブジェクトとしてインスタンス化するシナリオはありますか?もしそうなら、例を挙げてください!

ありがとう!

役に立ちましたか?

解決

Expression< T> は、ほぼ完全にLINQに使用されますが、そうではありません 。 LINQ内では、通常、「キャプチャ」するために使用されます。ロジックはコードで表現されますが、データには保持されます。そのデータは、LINQプロバイダーによって検査され、適切に処理されます。 SQLに変換します。通常、LINQの式ツリーは、コンパイラによってラムダ式またはクエリ式から作成されますが、それ以外の場合は、APIを直接自分で使用すると便利です。

使用した他の場所のいくつかの例と使用例:

  • MiscUtil で、Marc Gravellはこれを使用して「汎用算術」を実装しました。 -型に関連する演算子がある場合、一般的に使用できます。
  • UnconstrainedMelody で同様の方法でフラグ列挙の操作を実行しましたが、基になる型の( long ulong の範囲が異なるため、予想よりも難しい)
  • ビジュアルLINQ クエリ式を使用して「アニメーション」しました; LINQで、何が起こっているのかを確認できます。これは明らかにLINQの使用法ですが、ロジックを別の形式に変換する従来の形式ではありません。

他のヒント

LINQに関しては、純粋にラムダで実行できるよりも、実行時に汎用性の高いLINQクエリを作成するためにできることがあります。

DynamicMethod およびILの代替として、 Expression をマイクロコンパイラとして何度も使用しました。このアプローチは、.NET 4.0( InfoQで説明したように)で強化されていますが、 3.5できることはたくさんあります(一般的にランタイムデータ、設定などに基づいています):

また、Microsoftで行ったいくつかの作業の数学エンジンの一部としても使用しました。つまり、数式("(x + 12)* y = z"など)を Expression ツリー、コンパイルして実行します。

もう1つの興味深い使用方法(Jason Bockによるイラスト、こちら)は遺伝的プログラミングです。候補を Expression ツリーとして構築し、それらを迅速に( Compile()の後に)実行するために必要なコードがありますが、重要なのは(遺伝子プログラミングの場合)、フラグメントをスワップするためです

以前の&を見てください。 別のSO質問への回答のコードの後。 p>

概要: Expression<> は、コードを大幅に簡素化し、理解しやすくし、幻のバグを修正しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top