Skip to content

Commit e348fa7

Browse files
committed
Some others inference rules (not tested)
1 parent e1c9732 commit e348fa7

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

CodingSeb.ExpressionEvaluator/ExpressionEvaluator.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3475,11 +3475,32 @@ protected virtual MethodInfo TryToCastMethodParametersToMakeItCallable(MethodInf
34753475
inferedTypes.Add(paraMethodInfo.ReturnType);
34763476
}
34773477
}
3478+
else if(paramsForInference.ParameterType.Name.StartsWith("Action"))
3479+
{
3480+
Type specificType = Array.Find(paramsForInference.ParameterType.GetGenericArguments(), pType => pType.Name.Equals(name));
3481+
MethodInfo paraMethodInfo = Array.Find(methodsGroupEncaps.MethodsGroup, mi => mi.GetParameters().Length == paramsForInference.ParameterType.GetGenericArguments().Length);
3482+
if(specificType != null)
3483+
{
3484+
inferedTypes.Add(paraMethodInfo.GetParameters()[specificType.GenericParameterPosition].ParameterType);
3485+
}
3486+
}
3487+
else if(paramsForInference.ParameterType.Name.StartsWith("Func"))
3488+
{
3489+
Type specificType = Array.Find(paramsForInference.ParameterType.GetGenericArguments(), pType => pType.Name.Equals(name));
3490+
MethodInfo paraMethodInfo = Array.Find(methodsGroupEncaps.MethodsGroup, mi => mi.GetParameters().Length == paramsForInference.ParameterType.GetGenericArguments().Length - 1);
3491+
if(specificType?.GenericParameterPosition == paraMethodInfo.GetParameters().Length)
3492+
{
3493+
inferedTypes.Add(paraMethodInfo.ReturnType);
3494+
}
3495+
else
3496+
{
3497+
inferedTypes.Add(paraMethodInfo.GetParameters()[specificType.GenericParameterPosition].ParameterType);
3498+
}
3499+
}
34783500
}
3479-
else
3501+
else if (modifiedArgs[paramsForInference.Position].GetType().HasElementType)
34803502
{
3481-
if(modifiedArgs[paramsForInference.Position].GetType().HasElementType)
3482-
inferedTypes.Add(modifiedArgs[paramsForInference.Position].GetType().GetElementType());
3503+
inferedTypes.Add(modifiedArgs[paramsForInference.Position].GetType().GetElementType());
34833504
}
34843505
}
34853506
}
@@ -3633,7 +3654,7 @@ protected virtual MethodInfo TryToCastMethodParametersToMakeItCallable(MethodInf
36333654
.GetMethod("Cast")
36343655
.MakeGenericMethod(parameterType.GetElementType())
36353656
.Invoke(null, new object[] { modifiedArgs[a] });
3636-
3657+
36373658
modifiedArgs[a] = typeof(Enumerable)
36383659
.GetMethod("ToArray")
36393660
.MakeGenericMethod(parameterType.GetElementType())

0 commit comments

Comments
 (0)