代码之家  ›  专栏  ›  技术社区  ›  DanP

如何查找表达式指定的类型?

  •  1
  • DanP  · 技术社区  · 15 年前

    例如,假设我有一个方法,它将以下内容作为参数:

    Expression<Func<T, object>> path
    

    如何确定表达式中指定的“对象”的类型?更具体地说,我想确定它是否是集合类型(例如 IEnumerable )

    3 回复  |  直到 15 年前
        1
  •  2
  •   Charles    15 年前

    你已经在使用仿制药了,为什么不一路走呢?

    void GetMemberType<TArg, TProperty>(Expression<Func<TArg, TProperty>> path)
    {
        // Get the member ...
        var member = path.Body as MemberExpression;
    
        // ... Do whatever you want with the member ...
    
        // Now get the type
        var memberType = typeof(TProperty);
    }
    
        2
  •  1
  •   Charles    15 年前

    或者,您可以执行如下操作(这更符合您的泛型类型参数):

    // Get your expression
    // (probably already provided as an arg to one of your methods, I'm willing to bet)
    Expression<Func<T, object>> path = ...
    
    var memberExpr = path.Body as MemberExpression;
    var member = memberExpr.Member;
    
    Type type;
    
    if (member is FieldInfo)
    {
        var field = member as FieldInfo;
        type = field.FieldType;
    }
    
    if (member is PropertyInfo)
    {
        var property = member as PropertyInfo;
        type = property.PropertyType;
    }
    
        3
  •  0
  •   Richard    15 年前

    Expression.Type 将回答此问题(表达式的“result”类型)。

    要更深入更一般地挖掘,您需要考虑不同的可能性,具体取决于 Expression 举个例子 subtypes of Expression 你真的有。

    推荐文章