From 1c258e768091c83e60c61fae520b218d551c7aa1 Mon Sep 17 00:00:00 2001 From: Denis Zubritskiy Date: Mon, 5 Jun 2023 12:18:56 +0300 Subject: [PATCH] Fix expression in CreateGetter --- .../Data/Core/ClrPropertyInfo.cs | 3 ++- .../Data/ReflectionClrPropertyInfoTests.cs | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 tests/Avalonia.Base.UnitTests/Data/ReflectionClrPropertyInfoTests.cs diff --git a/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs b/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs index 24149c17e0..6027676501 100644 --- a/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs +++ b/src/Avalonia.Base/Data/Core/ClrPropertyInfo.cs @@ -60,7 +60,8 @@ namespace Avalonia.Data.Core var target = Expression.Parameter(typeof(object), "target"); return Expression.Lambda>( Expression.Convert(Expression.Call(Expression.Convert(target, info.DeclaringType!), info.GetMethod), - typeof(object))) + typeof(object)), + target) .Compile(); } diff --git a/tests/Avalonia.Base.UnitTests/Data/ReflectionClrPropertyInfoTests.cs b/tests/Avalonia.Base.UnitTests/Data/ReflectionClrPropertyInfoTests.cs new file mode 100644 index 0000000000..5c51dd0c06 --- /dev/null +++ b/tests/Avalonia.Base.UnitTests/Data/ReflectionClrPropertyInfoTests.cs @@ -0,0 +1,24 @@ +using Avalonia.Data.Core; +using Xunit; + +namespace Avalonia.Base.UnitTests.Data; + +public class ReflectionClrPropertyInfoTests +{ + public class TestClass + { + public string Test { get; set; } + } + + [Fact] + public void Can_Compile() + { + var propertyInfo = new ReflectionClrPropertyInfo( + typeof(TestClass).GetProperty(nameof(TestClass.Test))!); + var target = new TestClass(); + const string result = "qwerty"; + propertyInfo.Set(target, result); + Assert.Equal(result, target.Test); + Assert.Equal(result, (string)propertyInfo.Get(target)); + } +}