Get PropertyInfo of a parameter passed as lambda expression

前端 未结 4 1829
攒了一身酷
攒了一身酷 2021-01-11 14:49

For example, I have a class:

public class Person
{
  public int Id;
  public string Name, Address;
}

and I want to call a method to update

4条回答
  •  猫巷女王i
    2021-01-11 15:13

    Here is a version of @DanielMöller's answer updated for modern syntax, with specified exception messages, and documentation.

    /// 
    ///     Gets the corresponding  from an .
    /// 
    /// The expression that selects the property to get info on.
    /// The property info collected from the expression.
    /// When  is null.
    /// The expression doesn't indicate a valid property."
    private PropertyInfo GetPropertyInfo(Expression> property)
    {
        if (property == null) {
            throw new ArgumentNullException(nameof(property));
        }
    
        if (property.Body is UnaryExpression unaryExp) {
            if (unaryExp.Operand is MemberExpression memberExp) {
                return (PropertyInfo)memberExp.Member;
            }
        }
        else if (property.Body is MemberExpression memberExp) {
            return (PropertyInfo)memberExp.Member;
        }
    
        throw new ArgumentException($"The expression doesn't indicate a valid property. [ {property} ]");
    }
    

提交回复
热议问题