如果这个问题表述不当,请多多包涵。不知道是问题的一部分。
可以在 WPF 中的 PropertyChangedEventArgs 中找到我想要完成的示例。如果您想在 WPF 中标记某个属性已更改,您可以这样做:
PropertyChanged(this, new PropertyChangedEventArgs("propertyName"));
您将 string 传递给 PropertyChangedEventArgs,它引用已更改的 property name。
您可以想象,我真的不想在我的代码中使用硬编码的属性名称字符串。当然,Refactor-rename 遗漏了它,这使得它不仅在美学上没有吸引力,而且还容易出错。
我更愿意引用属性本身 ...不知何故。
PropertyChanged(this, new PropertyChangedEventArgs(?SomeClass.PropertyName?));
看来我应该能够用一个简短的方法来包装它,让我说出类似上面的内容。
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*
到目前为止,我画的是一片空白。
最佳答案
不幸的是,没有直接的方法可以做到这一点;但是,您可以在 .NET 3.5 中通过 Expression
执行此操作。 See here更多。复制示例:
PropertyInfo prop = PropertyHelper<Foo>.GetProperty(x => x.Bar);
(将其更改为返回名称而不是 PropertyInfo
非常简单)。
同样,编写一个变体会非常简单:
OnPropertyChanged(x=>x.Name);
使用:
OnPropertyChanged<T>(Expression<Func<MyType,T>> property) {...}
关于c# - 在 C# 中引用属性本身。反射?通用的?类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/855337/