public static MemberExpression Property(Expression expression, string propertyName)
{
RequiresCanRead(expression, nameof(expression));
ContractUtils.RequiresNotNull(propertyName, nameof(propertyName));
// bind to public names first
PropertyInfo pi = expression.Type.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.FlattenHierarchy)
?? expression.Type.GetProperty(propertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.FlattenHierarchy);
if (pi == null)
{
throw Error.InstancePropertyNotDefinedForType(propertyName, expression.Type, nameof(propertyName));
}
return Property(expression, pi);
}