从属性而不是名称获取PropertyInfo

Sam*_*Sam 12 c# reflection

比方说,我有这个简单的类:

public class MyClass
{
  public String MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

获取MyProperty的PropertyInfo的方法是:

typeof(MyClass).GetProperty("MyProperty");
Run Code Online (Sandbox Code Playgroud)

这糟透了!

为什么?容易:一旦我更改属性的名称就会中断,它需要很多专门的测试才能找到像这样使用属性的每个位置,重构和使用树无法找到这些类型的访问.

有没有办法正确访问一个属性?什么,在编译时验证?
我喜欢这样的命令:

propertyof(MyClass.MyProperty);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

你现在最接近的是使用表达式树:

GetProperty<MyClass>(x => x.MyProperty)
Run Code Online (Sandbox Code Playgroud)

然后吸PropertyInfo出来GetProperty(你必须写).但是,这有点脆弱 - 没有编译时保证表达式树只是属性访问.

另一种方法是保持您正在使用的属性名称可以轻松进行单元测试,并依赖于此.

基本上你想要的是infoofC#团队已经多次谈过的神秘操作员 - 但到目前为止还没有完成切割:(


Fem*_*ref -2

反射的重点是能够在运行时访问东西。如果我们假设您的运算符可以工作,那么您已经拥有类信息和属性,从而使整个事情完全无用。