Skip to content

Commit 02aa9d5

Browse files
CopilotStefH
andcommitted
Optimize implicit operator lookup in ExpressionPromoter
Agent-Logs-Url: https://github.com/zzzprojects/System.Linq.Dynamic.Core/sessions/82ed2f4e-0c76-407c-a330-d4043e96162f Co-authored-by: StefH <249938+StefH@users.noreply.github.com>
1 parent 605c558 commit 02aa9d5

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

src/System.Linq.Dynamic.Core/Parser/ExpressionPromoter.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,20 @@ public ExpressionPromoter(ParsingConfig config)
140140
// Look for op_Implicit on the source type or the target type.
141141
var implicitOperator =
142142
returnType.GetMethods(BindingFlags.Public | BindingFlags.Static)
143-
.Where(m => m.Name == "op_Implicit" && m.ReturnType == type)
144-
.FirstOrDefault(m => m.GetParameters().FirstOrDefault()?.ParameterType == returnType)
143+
.FirstOrDefault(m =>
144+
{
145+
if (m.Name != "op_Implicit" || m.ReturnType != type) return false;
146+
var parameters = m.GetParameters();
147+
return parameters.Length == 1 && parameters[0].ParameterType == returnType;
148+
})
145149
??
146150
type.GetMethods(BindingFlags.Public | BindingFlags.Static)
147-
.Where(m => m.Name == "op_Implicit" && m.ReturnType == type)
148-
.FirstOrDefault(m => m.GetParameters().FirstOrDefault()?.ParameterType == returnType);
151+
.FirstOrDefault(m =>
152+
{
153+
if (m.Name != "op_Implicit" || m.ReturnType != type) return false;
154+
var parameters = m.GetParameters();
155+
return parameters.Length == 1 && parameters[0].ParameterType == returnType;
156+
});
149157

150158
if (implicitOperator != null)
151159
{

test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1556,7 +1556,7 @@ public void DynamicExpressionParser_ParseLambda_With_Implicit_Operator_In_Method
15561556
var expression = $"{nameof(MyMethodsWithImplicitOperatorSupport)}.{nameof(MyMethodsWithImplicitOperatorSupport.UsesMyStructWithImplicitOperator)}(\"Foo\")";
15571557

15581558
// Act
1559-
var parser = new ExpressionParser([], expression, [], ParsingConfig.Default);
1559+
var parser = new ExpressionParser(parameters: [], expression, values: [], ParsingConfig.Default);
15601560
var parsedExpression = parser.Parse(typeof(string));
15611561
var lambda = Expression.Lambda<Func<string>>(parsedExpression);
15621562
var method = lambda.Compile();

0 commit comments

Comments
 (0)