我需要编写一个泛型方法,它接受泛型类型的实例和字符串格式的属性名称,并返回一个表达式树
我需要转换一个简单的 lambda 表达式
a => a.SomePropertyName
其中 a
是泛型类型,它将具有名为 SomePropertyName
的属性
我知道我们可以使用下面的反射代码获取属性信息
System.Reflection.PropertyInfo propInfo = a.GetType().GetProperty("SomePropertyName");
这可能很简单,但我对表达式树不是很熟悉,如果有类似的问题,请链接并关闭
最佳答案
假设事先不知道参数类型和返回类型,您可能必须使用一些 object
,但从根本上说,这只是:
var p = Expression.Parameter(typeof(object));
var expr = Expression.Lambda<Func<object, object>>(
Expression.Convert(
Expression.PropertyOrField(
Expression.Convert(p, a.GetType()), propName), typeof(object)), p);
如果输入和输出类型已知,您可以调整 Func<,>
参数,并可能删除 Expression.Convert
.在极端情况下,您可以在不知道 lambda 的签名 的情况下通过以下方式获得 lambda :
var p = Expression.Parameter(a.GetType());
var expr = Expression.Lambda(Expression.PropertyOrField(p, propName), p);
关于c# - 创建用于访问泛型类型属性的表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500604/