Incompreensão das árvores de expressão compiladas?
Tenho esta expressão:
Expression<Func<string, bool>> f = s => s.Length < 5;
ParameterExpression p = Expression.Parameter (typeof (string), "s");
MemberExpression stringLength = Expression.Property (p, "Length");
ConstantExpression five = Expression.Constant (5);
BinaryExpression comparison = Expression.LessThan (stringLength, five);
Expression<Func<string, bool>> lambda= Expression.Lambda<Func<string, bool>> (comparison, p);
// permite: testar
Func<string, bool> runnable = lambda.Compile();
Conso,le.WriteLine (runnable ("kangaroo")); // False
Console.WriteLine (runnable ("dog")); //True
Eu quero perguntar sobre o.Compile()
O que ele compila? E qual é a diferença entre a primeira execução e as execuções posteriores ...?
Compile deve ser algo que acontece uma vez e não acontece novamente mais tarde ....
O que / como isso me ajuda?