質問: expression.Evaluate(); // or something foreach(item in result) { Console.WriteLine(/* etc. */) } } ``` 結果は次のようにコンソールに書き込まれます。 > myString.Select(s => s.ToLower()) > > (第1項目) > > (次の項目 > > (等...) > > 言い換えれば、私の`ShowMe`メソッドは式の値ではなく式ツリー上で動作するので、与えられた式だけでなく計算結果も表示できます。 `ShowMe`を単に宣言することはできません: ``` public void ShowMe(Expression expr) ``` ...しかし私が宣言すれば ``` public void ShowMe(Expression> expr) ``` ...それ*は*仕事の*並べ替え* - 私はラムダ式で私のメソッドを呼び出す必要があります: ``` ShowMe(() => myString.Select(s => s.ToLower())) ``` ...私はしたくない。 私はこれができることを合理的に確信しています... FluentAssertionsはそれを行います。たとえば、次の行のテストコードを実行するとします。 ``` (1 + 1).Should.Be(3) ``` 私は次の結果を得ます: > 予想される(1 + 1)は3であるが、2と見なされる。 > > FluentAssertionは式(1 + 1)を評価し、式ツリーを取得して、評価した元の式を表示できるようにしました。 私はこれがどのように行われたか見ることができませんが、私は似たようにしたいと思います。どうすればいいのですか?
回答: これは、どの方法でも不可能です。 それらのライブラリはすべて、スタックトレースを解析し、行番号だけでなくファイル名も抽出します。次に、式はソースコードファイルから特定の行に抽出されます(これには解析/検証が含まれます)。 特に、ソースコードが存在しない/利用可能でない場合、式を表示することはできません。