表达式树重用值?

Roy*_*mir 3 c# lambda .net-4.0 expression-trees

我正在读Jon Skeet的书.(表达式树章节)它有一个用lambda表达式创建表达式树的例子:

Expression<Func<string, string, bool>> expression =    (x, y) => x.StartsWith(y);
var compiled = expression.Compile();
Console.WriteLine(compiled("First", "Second"));
Console.WriteLine(compiled("First", "Fir"));
Run Code Online (Sandbox Code Playgroud)

现在他对表达式树做了同样的事情:

在此输入图像描述

题 :

黄色部分已经包括PARAMS信息!

为什么我必须在那些参数的蓝色部分指定AGAIN ?

Ani*_*Ani 5

我想你的问题是:

为什么不能Expression.Lambda检查整个表达式主体的参数表达式,然后将它们用作表达式参数,这使我免于在Lambda调用中明确地将它们再次移交的麻烦?

嗯,它肯定可以,但是在一般情况下它怎么知道以什么 顺序接受这些参数?

在您的示例中,它将如何知道是否生成表达式 - 相当于:

(x, y) => x.StartsWith(y) 
Run Code Online (Sandbox Code Playgroud)

(要么)

(y, x) => x.StartsWith(y)?
Run Code Online (Sandbox Code Playgroud)

你应该lambda.Compile()("42", "4")回来true还是false

在一般情况下,它不能代表您做出这些决定.