Browse Source

Fix expression in CreateGetter

Denis Zubritskiy 2 years ago
parent
commit
1c258e7680

+ 2 - 1
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<Func<object, object>>(
                     Expression.Convert(Expression.Call(Expression.Convert(target, info.DeclaringType!), info.GetMethod),
-                        typeof(object)))
+                        typeof(object)),
+                    target)
                 .Compile();
         }
 

+ 24 - 0
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));
+    }
+}