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 ?
我想你的问题是:
为什么不能
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
?
在一般情况下,它不能代表您做出这些决定.