gpt4 book ai didi

c# - 创建用于访问泛型类型属性的表达式树

转载 作者:可可西里 更新时间:2023-11-01 08:43:01 25 4
gpt4 key购买 nike

我需要编写一个泛型方法,它接受泛型类型的实例和字符串格式的属性名称,并返回一个表达式树

我需要转换一个简单的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com