比如说,现在有类classA,其中有3个属性ProA,ProB,ProC现在我先实例化,再对其中两个属性赋值classA insA=new classA();
insA.ProA="1";
insA.ProC=null;现在我想知道哪个属性被赋值了。对于上面的例子,就是获取到ProA和ProC。请问有什么简单的办法可以实现??

解决方案 »

  1.   

    反射对比下DefaultValue和现在的值
      

  2.   

    bool IsSetProA {get; set;};string proA;string ProA
    {
        get{ return proA;}
        set{ IsSetProA =true; proA=value; }
    }// 当给ProA这个属性赋值时,就给记录属性IsSetProA赋值
    // 通过读取IsSetProA这个属性,就能知道对应的ProA是否被赋过值
      

  3.   

    为属性设置 DefaultAttribute
    利用反射获取 DefaultAttribute 的值,比对 PropertyValue
      

  4.   

    3L的方法跟我想到的比较类似,就是复杂了点,再看有没有简单点的办法在属性的set绑定一个事件行不行
      

  5.   


    这是要做一个像hibernate那样的东西,把值写到一个类中,然后再写到数据库,现在是我只想更新某几个字段,所以。
      

  6.   

    事实上,很多组件的值发生改变都是会抛出ValueChange一类的事件的,关键是你到底要什么功能?是要知道哪些属性被设置?还是要在改变值的时候做一些事情?
      

  7.   

    public class Person : INotifyPropertyChanged
    {
      private string firstNameValue;
      public string FirstName{
      get { return firstNameValue; }
      set
      {
      firstNameValue=value;
      NotifyPropertyChanged("FirstName");
      }
      }
      public event PropertyChangedEventHandler PropertyChanged;
      public void NotifyPropertyChanged(string propertyName)
      {
      if (PropertyChanged != null)
      {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
      }
      }   
    }
      

  8.   


    我想知道某个实例的所有属性(property)是否被set过(值有没有变不重要,只要知道是否set过),然后再弄一个方法,把这些set过的property转成一个hashtable(就是说没set过的就不用了)
      

  9.   


    这接口看名字就觉得很接近了,但再仔细看msdn, 发现原来触发此事件还是要在每个属性中添加一个方法来触发的其实我是想在一个类中只用加一段代码就能实现我的需求(比如在构造函数里加),而不是每个property都要复制一段,因为现在代码有点多,改起来也不是容易的事
      

  10.   

    给每个属性都加一个IsChanged的标记,如果调用了该属性的set方法,就讲IsChanged标记设置为true