Retrieving Property name from lambda expression

前端 未结 21 2020
迷失自我
迷失自我 2020-11-21 11:12

Is there a better way to get the Property name when passed in via a lambda expression? Here is what i currently have.

eg.

GetSortingInfo         


        
21条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-21 11:58

    I've updated @Cameron's answer to include some safety checks against Convert typed lambda expressions:

    PropertyInfo GetPropertyName(
    Expression> propertyLambda)
    {
      var body = propertyLambda.Body;
      if (!(body is MemberExpression member)
        && !(body is UnaryExpression unary
          && (member = unary.Operand as MemberExpression) != null))
        throw new ArgumentException($"Expression '{propertyLambda}' " +
          "does not refer to a property.");
    
      if (!(member.Member is PropertyInfo propInfo))
        throw new ArgumentException($"Expression '{propertyLambda}' " +
          "refers to a field, not a property.");
    
      var type = typeof(TSource);
      if (!propInfo.DeclaringType.GetTypeInfo().IsAssignableFrom(type.GetTypeInfo()))
        throw new ArgumentException($"Expresion '{propertyLambda}' " + 
          "refers to a property that is not from type '{type}'.");
    
      return propInfo;
    }
    

提交回复
热议问题