11

式ツリーの概念は完全に理解していますが、式ツリーが役立つ状況を見つけるのに苦労しています。式ツリーを適用できる特定のインスタンスはありますか? それとも、コードのトランスポート メカニズムとしてのみ有用ですか? ここで何かが欠けているように感じます。ありがとう!

4

3 に答える 3

7

単体テストのモック フレームワークの中には、強く型付けされた期待/検証を設定するために式ツリーを利用するものがあります。すなわち:

myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method
                                              // SomeMethod was called with 
                                              // someObject as the argument

ここでは、式が実際に実行されることはありませんが、式自体が興味深い情報を保持しています。式ツリーのない代替手段は次のようになります

myMock.Verify("SomeMethod", someObject) // we've lost the strong typing
于 2008-08-26T10:53:10.423 に答える
6

それとも、コードのトランスポート メカニズムとしてのみ有用ですか?

コードの実行メカニズムとして役立ちます。インタープリター パターンを使用すると、式ツリーを直接解釈できます。これは非常に簡単かつ迅速に実装できるため便利です。このようなインタプリタはいたるところにあり、ネストされた構造を出力する場合など、何も「解釈」していないように見える場合でも使用されます。

于 2008-08-26T11:03:34.687 に答える
4

式ツリーは、何らかの方法で変更または再適用するために関数ロジックにアクセスする必要がある場合に役立ちます。

Linq to SQL は良い例です:

//a linq to sql statement
var recs (
    from rec in LinqDataContext.Table
    where rec.IntField > 5
    select rec );

式ツリーがない場合、このステートメントはすべてのレコードを返し、C# の where ロジックをそれぞれに適用する必要があります。

where rec.IntField > 5SQL に解析できる式ツリーを使用すると、次のようになります。

--SQL statment executed
select *
from [table]
where [table].[IntField] > 5
于 2008-08-26T17:57:35.537 に答える