因此,我正在尝试学习如何组合我自己的表达式、传递对象并编译以检索生成的结果,而我一直在努力了解我的对象实例在所有这些中的确切位置。
所以这就是我从阅读代码和逐步完成的过程中所得到的
创建您的对象实例、您的表达式字符串和参数。
T SampleString = "Some String I have"; var operation= "it.Replace(@0, @1)"; var operationParameters = new [] { "e", "CLOWN"};
创建一个 ParameterExpression 对象以指定您的操作将对其执行的参数类型
ParameterExpression[] parameters = new ParameterExpression[] { Expression.Parameter(typeof(T), "") };
使用 ExpressionParser 类,创建您需要针对您的对象执行的表达式
ExpressionParser parser = new ExpressionParser(parameters, operation, operationParameters );
调用 ExpressionParser Parse 方法来检索生成的表达式,并传递给它你想要的结果类型
var generatedExpression = parser.Parse(typeof(String));
现在调用 Expression.Lamba,将生成的Expression 和项目传递给它
var StringReplaceresult = Expression.Lambda<Func<T,String> >(generatedExpression , parameters).Compile()(item);
我不太确定上述内容是否正确,或者我遇到的问题究竟从哪里开始。我知道我的编译失败(5)。该消息是关于没有将正确数量的参数传递给那里的 Expression.Lamba 方法。但我想知道这是否真的是问题所在,同样,我不确定我是否能达到 60%,所以我很感激有人会在必要时纠正我的上述工作。