using System.Threading.Tasks;
using System.Linq.Expressions;
using System.Collections.Generic;
public static void Main()
var o = GetProperties<Adeel>((n) => n.Name && n.Rizvi.DOB);
return Task.FromResult<bool>(true);
public static IEnumerable<MemberInfo> GetProperties<T>(Expression<Func<T>> expression)
var visitor = new PropertyVisitor<T>();
visitor.Visit(expression.Body);
public class PropertyVisitor<T> : ExpressionVisitor
public readonly List<MemberInfo> Path = new List<MemberInfo>();
public Expression Modify(Expression expression)
return Visit(expression);
protected override Expression VisitMember(MemberExpression node)
if (!(node.Member is PropertyInfo))
throw new ArgumentException("The path can only contain properties", nameof(node));
return base.VisitMember(node);