c# - 动态属性选择器 lambda 函数

标签 c# properties expression

我正在尝试使用给定的类型和属性名称构建属性选择器表达式。即 t => t.PropertyName。

以下代码编译正常,但结果为空值。有人可以指出代码中的错误吗?

    public static Expression<Func<T,object>> CreatePropSelectorExpression(string propName) where T:class,new()
    {
    var temp = Activator.CreateInstance<T>();
    ParameterExpression t = Expression.Parameter(typeof(T),"t");
    MemberExpression member = Expression.PropertyOrField(Expression.Constant(temp),propName);
    return Expression.Lambda<Func<T,object>>(member,t);
    }

提前致谢

最佳答案

您实际上不需要创建对象 T 的实例,您只是创建一些表达式树。这一切都归结为:

Expression<Func<T, object>> CreatePropSelectorExpression<T>(string propertyName)
{
    var parameter = Expression.Parameter(typeof(T));
    var body = Expression.Convert(Expression.PropertyOrField(parameter, propertyName), typeof(object));
    return Expression.Lambda<Func<T, object>>(body, parameter);
}

关于c# - 动态属性选择器 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320561/

相关文章:

c# - 如何将插入符号移动到 Resharper 10 中的当前缩进级别

python - 有没有办法确保对变量执行验证而不是@property?

ant - Ant 属性文件中的绝对路径

bash - Bash 中的算术表达式?

每隔 30 分钟执行一次 Spring cron 表达式

c# - 模拟网络服务调用......有时

c# - 在方法签名中使用 params [] 是个坏主意吗

c# - 系统.Windows.数据错误 : 40 : BindingExpression path error: property not found on object

java - 服务器启动时如何在jboss-tomcat-struts中加载config.properties文件

c# - 如何在运行时生成 lambda 将属性名称作为字符串传递?