Set*_*son 12 c# reflection expression-trees
我有一个接受Expression<Func<T, object>>实例的方法.我想得到特定表达式实例返回的实际数据类型,而不是object.
我可以让它用于直接属性引用,所以如果我传入表达式,x => x.IntegerProperty我可以得到一个整数的类型引用.此方法需要将其转换为MemberExpression.
但是,我不能让它为任意表达式工作.例如,如果表达式是x => x.IntegerProperty.ToString()我想获得字符串的Type引用.我无法将其编译为MemberExpression,如果我只是.Compile()检查返回类型,我会得到"对象".
如何查看特定的表达式实例并派生实际的返回类型?
Luk*_*keH 23
像这样的东西可能会成功.它可能并未涵盖所有可能性,但它是一个开始.
public static Type GetObjectType<T>(Expression<Func<T, object>> expr)
{
if ((expr.Body.NodeType == ExpressionType.Convert) ||
(expr.Body.NodeType == ExpressionType.ConvertChecked))
{
var unary = expr.Body as UnaryExpression;
if (unary != null)
return unary.Operand.Type;
}
return expr.Body.Type;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6425 次 |
| 最近记录: |