[英]Get PropertyInfo from property instead of name
比方说,我有这个简单的类:
public class MyClass
{
public String MyProperty { get; set; }
}
获取MyProperty的PropertyInfo的方法是:
typeof(MyClass).GetProperty("MyProperty");
这糟透了!
为什么? 容易:一旦我更改属性的名称就会中断,它需要很多专门的测试才能找到像这样使用属性的每个位置,重构和使用树都无法找到这些类型的访问权限。
有没有办法正确访问一个属性? 什么,在编译时验证?
我喜欢这样的命令:
propertyof(MyClass.MyProperty);
你现在最接近的是使用表达式树:
GetProperty<MyClass>(x => x.MyProperty)
然后在GetProperty
(你必须写)中吸取PropertyInfo
。 但是,这有点脆弱 - 没有编译时保证表达式树只是属性访问。
另一种方法是保持您正在使用的属性名称可以轻松进行单元测试,并依赖于此。
基本上你想要的是C#团队多次讨论的神话infoof
运算符 - 但到目前为止还没有进行过切割:(
自发布此问题以来,C#6已经与nameof运营商一起发布。 这允许使用以下内容访问属性
PropertyInfo myPropertyInfo = typeof(MyClass).GetProperty(nameof(MyClass.MyProperty));
如果重命名该属性,则此代码将无法编译(实际上它将会,因为如果重命名正确完成,重命名将更改此行代码)。
反思的全部意义是能够在运行时访问内容。 如果我们假设您的操作员可以工作,那么您已经拥有了类信息,因此也拥有了属性,使整个事情完全无用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.