c# - 在 C# 中引用属性本身。反射?通用的?类型?

标签 c# reflection properties

如果这个问题表述不当,请多多包涵。不知道是问题的一部分。

可以在 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/

相关文章:

java - 为什么 isAnnotationPresent 在 Java 7 和 Java 8 之间的工作方式不同?

swift - Swift 中的参数化初始化器反射

c# - 列表框在选项卡更改时不突出显示选择

c# - System.Web.HttpContext.Current 在请求之间是静态的

c# - WPF 应用程序引用 System.Windows.Forms

java - 资源包中的键是否唯一?

Javascript 对象在赋值后丢失属性

c# - Asp.Net Core 2.0 - 检索图像 Url

c# - 通过反射使用泛型类型调用的方法上的动态 Linq

iphone - 如何编写正确的只读属性?