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)
到目前为止,我正在画一个空白.
不幸的是,没有直接的方法可以做到这一点; 但是,您可以在.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)
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |