2

我正在尝试在运行时创建表达式以传递给第三方 API,该 API 的签名为 Expression<Func<T, object>>. 以下是我到目前为止所拥有的。这适用于引用类型,但值类型会导致异常(第 3 行)。

“System.Boolean”类型的表达式不能用于返回类型“System.Object”

我假设这是由于拳击问题,我没有处理。

我已尝试添加Expression.TypeAs(property, typeof(object)),但 API 不会接受/解析此输入,因为它会生成obj=> (obj.Foo As Object).

任何人都对如何创建与任何类型所需的签名匹配的表达式有任何想法?

// must be in the form of 'obj => obj.Foo', or the API wont parse
private static Expression<Func<T, object>> CreatePropertyExpression(PropertyInfo propertyInfo)
{
   var instanceParam = Expression.Parameter(propertyInfo.DeclaringType, "obj");
   var property = Expression.Property(instanceParam, propertyInfo);
   var lambda = Expression.Lambda<Func<T, object>>(property, instanceParam); // kaboom

   return (Expression<Func<T, object>>)lambda;
}
4

1 回答 1

2

添加演员/转换:

return Expression.Lambda<Func<T, object>>(
    Expression.Convert(property, typeof(object)), instanceParam);
于 2013-02-05T12:53:24.250 回答