代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Knight

在C#中引用属性本身。反思?通用?类型?

  •  5
  • Jeffrey Knight  · 技术社区  · 17 年前

    我想实现的一个示例可以在WPF中的PropertySetS中找到。如果你想在WPF中标记一个属性已更改,你可以这样做:

    PropertyChanged(this, new PropertyChangedEventArgs("propertyName"));
    

    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*
    

    3 回复  |  直到 17 年前
        1
  •  6
  •   Community Mohan Dere    9 年前

    不幸的是,没有直接的方法可以做到这一点;但是,您可以在中执行此操作。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) {...}
    
        2
  •  1
  •   Daniel Earwicker    17 年前

    这是一个经常请求的功能,通常称为infoof(“info of”),它将返回与成员关联的反射对象,例如。

    PropertyInfo pi = infoof(Person.Name);
    

    遗憾的是,dynamic关键字正在占用C#编译器团队的时间!

        3
  •  1
  •   Noldorin    17 年前

    我非常有信心,没有办法避免指定字符串——C#或.NET中没有内置任何功能。NET,允许您传递对属性的引用,据我所知,并传递 string 到目前为止,反射API将是最简单的方法。

    PostSharp