diff --git a/src/ExpressiveSharp/Transformers/RemoveNullConditionalPatterns.cs b/src/ExpressiveSharp/Transformers/RemoveNullConditionalPatterns.cs index c05f9c33..c74cbf66 100644 --- a/src/ExpressiveSharp/Transformers/RemoveNullConditionalPatterns.cs +++ b/src/ExpressiveSharp/Transformers/RemoveNullConditionalPatterns.cs @@ -119,8 +119,6 @@ private static bool AccessesReceiver(Expression expr, Expression receiver) private static bool ExpressionsEqual(Expression a, Expression b) { if (a == b) return true; - if (a is ParameterExpression pa && b is ParameterExpression pb) - return pa.Name == pb.Name && pa.Type == pb.Type; if (a is MemberExpression ma && b is MemberExpression mb) return ma.Member == mb.Member && ma.Expression is not null && mb.Expression is not null diff --git a/tests/ExpressiveSharp.Tests/Transformers/RemoveNullConditionalPatternsTests.cs b/tests/ExpressiveSharp.Tests/Transformers/RemoveNullConditionalPatternsTests.cs index c12ca3a5..59cb3e72 100644 --- a/tests/ExpressiveSharp.Tests/Transformers/RemoveNullConditionalPatternsTests.cs +++ b/tests/ExpressiveSharp.Tests/Transformers/RemoveNullConditionalPatternsTests.cs @@ -243,4 +243,23 @@ public void ImplementsIExpressionTreeTransformer() Assert.AreSame(expr, result); } + + [TestMethod] + public void DistinctParametersWithSameName_GuardIsKept() + { + var x1 = Expression.Parameter(typeof(NullTestInner), "x"); + var x2 = Expression.Parameter(typeof(NullTestInner), "x"); + + var conditional = Expression.Condition( + Expression.NotEqual(x1, Expression.Constant(null, typeof(NullTestInner))), + Expression.Property(x2, nameof(NullTestInner.Value)), + Expression.Constant(null, typeof(string))); + + var lambda = Expression.Lambda>(conditional, x1, x2); + + var transformed = (Expression>)_sut.Transform(lambda); + var compiled = transformed.Compile(); + + Assert.IsNull(compiled(null, new NullTestInner { Value = "bob" })); + } }