我正在努力思考如何为更多 lambda 构建表达式树(如下所示),更不用说可能有多个语句的东西了。例如:
Func<double?, byte[]> GetBytes
= x => x.HasValue ? BitConverter.GetBytes(x.Value) : new byte[1] { 0xFF };
我将不胜感激任何想法。
我建议通读Expression 类的方法列表 http://msdn.microsoft.com/en-us/library/bb155837.aspx,您的所有选项都列在那里,并且表达式树编程指南 http://msdn.microsoft.com/en-us/library/bb397951.aspx.
对于这个特殊的例子:
/* build our parameters */
var pX = Expression.Parameter(typeof(double?));
/* build the body */
var body = Expression.Condition(
/* condition */
Expression.Property(pX, "HasValue"),
/* if-true */
Expression.Call(typeof(BitConverter),
"GetBytes",
null, /* no generic type arguments */
Expression.Member(pX, "Value")),
/* if-false */
Expression.Constant(new byte[] { 0xFF })
);
/* build the method */
var lambda = Expression.Lambda<Func<double?,byte[]>>(body, pX);
Func<double?,byte[]> compiled = lambda.Compile();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)