如何从类实例的属性中获取属性名称?

时间:2013-06-11 16:04:44

标签: c# properties .net-4.5

这是我想要做的代码:

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

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

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

我看到之前有过类似的问题,但没有答案可以解释如何做我想做的事。

1 个答案:

答案 0 :(得分:4)

调用方法并传入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);