在C#中引用属性本身.反射?通用?类型?

Jef*_*ght 5 c# reflection properties

如果这个问题没有很好地制定,请耐心等待.不知道是问题的一部分.

我想要完成的一个例子可以在WPF中的PropertyChangedEventArgs中找到.如果要在WPF中标记属性已更改,则执行以下操作:

PropertyChanged(this, new PropertyChangedEventArgs("propertyName"));
Run Code Online (Sandbox Code Playgroud)

您将字符串传递给PropertyChangedEventArgs,它引用已更改的属性名称.

您可以想象我不希望在我的代码中使用硬编码字符串作为属性名称.当然,重构重命名错过了它,这使得它不仅在美学上没有吸引力,而且还容易出错.

我更倾向于参考房产本身 ...不知何故.

PropertyChanged(this, new PropertyChangedEventArgs(?SomeClass.PropertyName?));
Run Code Online (Sandbox Code Playgroud)

看起来我应该能够用一个简短的方法来包装它,让我说出类似上面的内容.

private void MyPropertyChanged(??) {
  PropertyChanged(this, new PropertyChangedEventArgs(??.ToString()??));
}

... so I can say something like:
MyPropertyChanged(Person.Name); //where I'm interested in the property *itself*
Run Code Online (Sandbox Code Playgroud)

到目前为止,我正在画一个空白.

Mar*_*ell 6

不幸的是,没有直接的方法可以做到这一点; 但是,您可以在.NET 3.5中执行此操作Expression.请看这里了解更多.要复制示例:

PropertyInfo prop = PropertyHelper<Foo>.GetProperty(x => x.Bar);
Run Code Online (Sandbox Code Playgroud)

(更改它以返回名称而不是PropertyInfo)非常简单.

同样,编写变体也很简单:

OnPropertyChanged(x=>x.Name);
Run Code Online (Sandbox Code Playgroud)

使用:

OnPropertyChanged<T>(Expression<Func<MyType,T>> property) {...}
Run Code Online (Sandbox Code Playgroud)