0

这是我想做的那种代码:

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

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

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

我看到以前有人问过类似的问题,但是没有答案可以很好地解释如何做我想做的事情。

4

1 回答 1

5

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

1 - 属性需要有一个值。

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

您可以做的是使用 anExpression将属性传递给方法,获取该表达式的主体,最后获取成员(属性)名称:

 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);
于 2013-06-11T16:37:10.123 回答