1

ドキュメントとその名前が暗示していることからCanReduce、さらに小さな式に分解できるすべての式に対して、プロパティの値を true に設定する必要があると推測できます。

しかし、よく観察すると、この推論はすべての場合に当てはまらないようです。の場合を考えてみましょうLambdaExpression。これは確かに複合単位です。ただし、LambdaExpressionクラスから直接派生するクラスは、プロパティExpressionをオーバーライドしません。CanReduceこのExpressionクラスは、CanReduceを返す実装を使用してプロパティを virtual として定義してfalseいるため、ラムダ式はこれ以上簡約できないことを暗示していますが、これは正しくありません。

では、このプロパティの本当の意味は何ですか?

4

2 に答える 2

3

詳細については、ここに長い回答を投稿しました: Expression.Reduce() は何をしますか? 、しかし簡単に言えば、すぐに使用できる .NET の動作は次のシナリオを減らすだけのようです。

  • 複合割り当てなどx += 4
  • プリ/ポスト インクリメント/デクリメント 例x++:--y
  • メンバーとリストの初期化 例new List<int>() { 4, 5 }:new Thing() { Prop1 = 4, Prop2 = 5 }

それ以外はそのままです。reduce 操作の一部としてデッド エクスプレッション カリングを行うことを支持する証拠も反対する証拠も見当たりませんでした (たとえば、空の BlockExpression は Reduce() 呼び出し中に式ツリーから削除されません)。

于 2015-11-23T23:26:05.000 に答える