创建动态表达式>

2023-12-31

我想创造一个动态Expression<Func<T,Y>>。以下代码适用于字符串,但不适用于日期时间。我的意思是不起作用,我得到了这个例外:

“‘System.Nullable`1[System.DateTime]’类型的表达式不能是 用于返回类型“System.Object””

任何人都可以吗analyze这个错误?

        Type type = typeof(DSVPNProjection);
        ParameterExpression arg = Expression.Parameter(type, "x");
        Expression expr = arg;

        PropertyInfo propertyInfo = type.GetProperty(sidx);
        expr = Expression.Property(expr, propertyInfo);

        var expression = 
        Expression.Lambda<Func<DSVPNProjection, object>>(expr, arg);

我需要更改object到其他类型?如果是,那么是哪一个?正如您所看到的,我正在尝试动态获取 PropertyInfo 并将其用作 Func 中的第二个参数。


对于值类型,您需要显式执行装箱(即转换为Object):

    Type type = typeof(DSVPNProjection);
    ParameterExpression arg = Expression.Parameter(type, "x");
    Expression expr = null;

    PropertyInfo propertyInfo = type.GetProperty(sidx);
    expr = Expression.Property(arg, propertyInfo);
    if (propertyInfo.PropertyType.IsValueType)
        expr = Expression.Convert(expr, typeof(object));

    var expression = 
    Expression.Lambda<Func<DSVPNProjection, object>>(expr, arg);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建动态表达式> 的相关文章

随机推荐