如果您已经有一个PropertyInfo
,那么@dtb 的答案是正确的。但是,如果您想找出当前所在的属性代码,则必须遍历当前调用堆栈以找出当前正在执行的方法并从中派生属性名称。
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);
编辑:
在您澄清之后,我想知道您是否想要从属性表达式中获取属性的名称。如果是这样,您可能想要编写这样的方法:
public static string GetPropertyName<T>(Expression<Func<T>> propertyExpression)
{
return (propertyExpression.Body as MemberExpression).Member.Name;
}
要使用它,你可以这样写:
var propertyName = GetPropertyName(
() => myObject.AProperty); // returns "AProperty"