2013-06-11 88 views
-1

这是我想要做的工作的那种代码:如何从类实例的属性中获取属性名称?

string Name = GetPropName(myClass.SomeProperty); // returns "SomeProperty" 

因为我可能是我的重命名类的属性,我不愿意忘记改变我的代码某处其字符串名称,并且有很多地方使用字符串名称作为属性,所以我想用这个方便的方法来获取属性的当前名称作为字符串。我该怎么做呢?

我所追求的是一种方法,它只返回作为参数接收的属性的字符串名称

我发现以前有类似的问题,但没有答案能很好地解释如何做我想做的事情。

+0

请参阅http://stackoverflow.com/a/3269604/880990 –

+0

是否需要类似GetPropName(x => x.PropName)的东西; – adt

+0

@我不知道,是吗? – user1306322

回答

3

调用该方法并传入MyClass.MyProperty的问题是该属性的值会发送到该方法。您可以尝试使用反射从该值中获取属性名称,但有两个问题:

1 - 属性需要有一个值。

2 - 如果相同类型的两个属性具有相同的值,则无法(至少据我所知)区分这两个属性。

什么,你可以尽管做的是使用一个Expression的财产传递给方法,获取表达式的主体和最终成员(属性)名称:

public static string GetPropertyName<T, P>(Expression<Func<T, P>> propertyDelegate) 
{ 
    var expression = (MemberExpression)propertyDelegate.Body; 
    return expression.Member.Name; 
} 

,并使用它:

string myPropertyName = GetPropertyName((MyClass x) => x.SomeProperty); 
+0

好吧!这是有效的,但不利的一面是它会中断编辑并继续执行它的位置。 – user1306322