If you already have a PropertyInfo
, then @dtb’s answer of using PropertyInfo.Name
is the right way. If, however, you’re wanting to find out which property’s code you’re currently in, you’ll have to traverse the current call stack to find out which method you’re currently executing and derive the property name from there.
var stackTrace = new StackTrace();
var frames = stackTrace.GetFrames();
var thisFrame = frames[0];
var method = thisFrame.GetMethod();
var methodName = method.Name; // Should be get_* or set_*
var propertyName = method.Name.Substring(4);
If you don’t have a PropertyInfo
object, you can get that from a property expression, like this:
public static string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
{
return (propertyExpression.Body as MemberExpression).Member.Name;
}
To use it, you’d write something like this:
var propertyName = GetPropertyName(
() => myObject.AProperty); // returns "AProperty"