diff --git a/ReadableExpressions.UnitTests/WhenTranslatingLambdas.cs b/ReadableExpressions.UnitTests/WhenTranslatingLambdas.cs index c5f1fa3f..3d9ba6c6 100644 --- a/ReadableExpressions.UnitTests/WhenTranslatingLambdas.cs +++ b/ReadableExpressions.UnitTests/WhenTranslatingLambdas.cs @@ -140,6 +140,20 @@ public void ShouldTranslateQuotedLambdaWithAnAnnotation() translated.ShouldBe(EXPECTED); } + // See https://github.com/agileobjects/ReadableExpressions/issues/31 + [Fact] + public void ShouldTranslateUnnamedLambdaParameters() + { + var stringsParameter = Expression.Parameter(typeof(string[])); + var linqSelect = CreateLambda((string[] ints) => ints.Select(int.Parse)); + var linqSelectWithUnnamed = Expression.Lambda(linqSelect.Body, stringsParameter); + var quoted = Expression.Quote(linqSelectWithUnnamed); + + var translated = ToReadableString(quoted); + + translated.ShouldBe("stringArray => ints.Select(int.Parse)"); + } + [Fact] public void ShouldTranslateRuntimeVariables() { diff --git a/ReadableExpressions/ExpressionAnalysis.cs b/ReadableExpressions/ExpressionAnalysis.cs index 71081eee..ecf0a566 100644 --- a/ReadableExpressions/ExpressionAnalysis.cs +++ b/ReadableExpressions/ExpressionAnalysis.cs @@ -196,8 +196,8 @@ private void Visit(Expression expression) continue; case ExpressionType.Lambda: - expression = ((LambdaExpression)expression).Body; - continue; + Visit((LambdaExpression)expression); + return; case ExpressionType.ListInit: Visit((ListInitExpression)expression); @@ -381,6 +381,12 @@ private void Visit(InvocationExpression invocation) Visit(invocation.Expression); } + private void Visit(LambdaExpression lambda) + { + Visit(lambda.Parameters); + Visit(lambda.Body); + } + private void Visit(ListInitExpression init) { Visit(init.NewExpression);