Я только что обнаружил некоторое загадочное поведение при работе с 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);
}
"a«?Куда ушел мой «x» и откуда взялся этот «a»?
Думая, что, возможно, это псевдоним, используемый на низком уровне, я искал «UsedName», «VisibleName» или что-то подобное.строк, но я ничего не нашел.
К сожалению, Expression
не имеет свойства Parameters
(я полагаю, что только LambdaExpression
), которое возвращает "используемые параметры", если таковые имеются, в данном выражении.
Можно создать метод, который пересекает все выражение и собирает различные используемые параметры, но мне было интересно, есть ли более простой способ сделать это.
Заранее большое спасибо.
Visual C # Express: 10.0.30319.1 RTMRel
.NET Framework: 4.0.30319 RTMRel