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

在C#中指属性本身。反射通用的类型

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

    如果这个问题没有很好的表述,请容忍我。不知道是问题的一部分。

    我想完成的一个例子可以在WPF中的PropertyChangedEventArgs中找到。如果要在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 回复  |  直到 16 年前
        1
  •  6
  •   Community CDub    8 年前

    不幸的是,没有直接的方法可以做到这一点;但是,您可以在.NET3.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    16 年前

    PropertyInfo pi = infoof(Person.Name);
    

        3
  •  1
  •   Noldorin    16 年前

    string 到目前为止,反射API将是最简单的方法。

    PostSharp (面向方面的.NET编程),它允许您添加代码,以便在各种属性更改时自动引发事件,正如您在问题中所演示的那样。