use*_*322 0 c# properties .net-4.5
这是我想让工作的那种代码:
string Name = GetPropName(myClass.SomeProperty); // returns "SomeProperty"
Run Code Online (Sandbox Code Playgroud)
因为我可能要重命名我的类的属性,所以我不想忘记在我的代码中的某处更改它们的字符串名称,并且有很多地方我使用字符串名称作为属性,所以我想要这个方便方法为我获取属性的当前名称作为字符串。我该怎么做呢?
我所追求的是一个方法,它只返回它作为参数接收的属性的字符串名称。
我看到之前有人问过类似的问题,但是没有答案可以很好地解释如何做我想做的事情。
调用方法并传入的问题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;
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
string myPropertyName = GetPropertyName((MyClass x) => x.SomeProperty);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2806 次 |
| 最近记录: |