using System.Linq.Expressions;
public static class MyExpressions
public static string NameOfProperty<T>(Expression<Func<T>> expression)
_ = expression ?? throw new ArgumentNullException(nameof(expression));
if (expression.Body.NodeType != ExpressionType.MemberAccess)
throw new ArgumentException("The expression must be a member access expression", nameof(expression));
var memberExpression = (MemberExpression)expression.Body;
return memberExpression.Member.Name;
public string SomeProperty { get; set; } = "Some Value";
public static void Main()
var propertyName = MyExpressions.NameOfProperty( () => obj.SomeProperty );
propertyName.Should().Be(nameof(MyClass.SomeProperty));
Console.WriteLine("The name of the property is: {0}", propertyName);