【发布时间】:2010-09-06 20:51:19
【问题描述】:
我刚刚在使用 System.Linq.Expressions.Expression 和 System.Reflection.MethodInfo 时发现了一些神秘的行为。
代码如下:
static void Main(string[] args)
{
Expression<Func<double, double, double>> example = (x, y) => Math.Sin(x);
//Prints out "x, y":
Console.WriteLine(example.Parameters[0].Name + ", " + example.Parameters[1].Name);
//Prints out "a":
Console.WriteLine((example.Body as MethodCallExpression).Method.GetParameters()[0].Name);
}
“一个”?我的“x”去哪儿了,这个“a”又是从哪里来的?
认为这可能是低级别使用的别名,我搜索了“UsedName”、“VisibleName”或类似的东西,但我没有找到任何东西。
不幸的是,Expression 没有Parameters 属性(我相信只有LambdaExpression 有),它会在给定表达式中返回“使用中的参数”(如果有的话)。
可以创建一个遍历整个表达式并收集使用中的不同参数的方法,但我想知道是否有更简单的方法来做到这一点。
非常感谢。
Visual C# Express:10.0.30319.1 RTMRel
.NET 框架:4.0.30319 RTMRel
【问题讨论】:
标签: .net reflection lambda expression expression-trees