using System.Linq.Expressions;
public static void Main()
Person p = new Person("Momo", "Hirai");
p.GetPropertyInfos(x => x.FirstName, x => x.LastName);
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string FullName { get; private set; }
public Person(string firstname, string lastname) {
FullName = string.Format("{0} {1}", FirstName, LastName);
public Tuple<string, string> GetPropertyData(Expression<Func<Person, object>> expr) {
MemberExpression me = expr.Body as MemberExpression;
UnaryExpression ue = expr.Body as UnaryExpression;
me = me != null ? me : (ue.Operand as MemberExpression);
string propertyName = string.Empty;
string propertyValue = string.Empty;
propertyName = me.Member.Name;
propertyValue = this.GetType().GetProperty(propertyName).GetValue(this, null).ToString();
return Tuple.Create(propertyName, propertyValue);
public void GetPropertyInfos(params Expression<Func<Person, object>>[] expr) {
foreach (var item in expr) {
var result = GetPropertyData(item);
Console.WriteLine("Property [{0}] has value [{1}]", result.Item1, result.Item2);