Skip to content

Commit 7010c2c

Browse files
authored
Properly handle default parameter value when the parameter type is a value type (#355)
Fixes #354
1 parent 5656777 commit 7010c2c

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/DynamicExpresso.Core/Resolution/MethodResolution.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,12 @@ public static bool CheckIfMethodIsApplicableAndPrepareIt(MethodData method, Expr
165165
if (parameter.HasDefaultValue)
166166
{
167167
var parameterType = TypeUtils.GetConcreteTypeForGenericMethod(parameter.ParameterType, promotedArgs, method);
168-
promotedArgs.Add(Expression.Constant(parameter.DefaultValue, parameterType));
168+
169+
var defaultValue = parameter.DefaultValue;
170+
if (defaultValue is null && parameterType.IsValueType)
171+
defaultValue = Activator.CreateInstance(parameterType);
172+
173+
promotedArgs.Add(Expression.Constant(defaultValue, parameterType));
169174
}
170175
else if (ReflectionExtensions.HasParamsArrayType(parameter))
171176
{

test/DynamicExpresso.UnitTest/GithubIssues.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,11 @@ public List<int> Add(List<int> list, Func<int, int> transform)
706706
{
707707
return list.Select(i => transform(i)).ToList();
708708
}
709+
710+
public Guid ReturnsGuid(Guid guid = default)
711+
{
712+
return guid;
713+
}
709714
}
710715

711716
[Test]
@@ -877,6 +882,15 @@ public void GitHub_Issue_341()
877882

878883
Assert.That(interpreter.Eval<bool>("(int)x == 1"), Is.EqualTo((int)x == 1));
879884
}
885+
886+
[Test]
887+
public void GitHub_Issue_354()
888+
{
889+
var interpreter = new Interpreter();
890+
interpreter.SetVariable("b", new Functions());
891+
892+
Assert.That(interpreter.Eval<Guid>("b.ReturnsGuid()"), Is.EqualTo(Guid.Empty));
893+
}
880894
}
881895

882896
internal static class GithubIssuesTestExtensionsMethods

0 commit comments

Comments
 (0)