有这么一种情况:
设A是一个类,这个类中有很多的属性,这里假设B---Z都为类A的属性
我们访问时一般都是通过A.B,A.C----A.Z来进行访问。
但实际上我可能在某个时间只会用其它其中一部分,但我自己也不知道在什么时候会访问那些属性或者说给它们附值,如果在一个方法里全部写
A.B=
A.C=



A.Z=
这太麻烦,有什么方法可以将A类的属性使用一个变量来代替,如设一变量string tmp;
访问量使用A.(tmp)的方式来访问,给tmp附值,如果tmp="B",那么现在我们访问的属性A.(tmp)就等价于A.B,请问想达到这种效果应该如何做,刚接确ASP.net,对C#不太熟悉,请高人指点一下,解决马上给分。

解决方案 »

  1.   

    B b = a.b;b //就是a.b的引用
      

  2.   


     你的这个tmp和A.a A.b 中的a和b有什么区别吗?  既然不会用到全部的属性,要用哪一个时就直接给这个赋值就完了  A.a 也好,A.b也好.
      

  3.   

    我的情况是,我的一组属性是从表或者XML中读来的,不同的表中的数据不一样,而我想遍历表,定义时,表的列名和这个类的属性名是对应的,在我不知道表中到底有那些属性的情况,我如何能一一指定给他附值,除非我把所有的属性都指定,否则,如果换了另一张表时,因为表中的属性不一样,就出问题了
      

  4.   

    加一个方法啊
    class A{
    B
    C
    ……
    public Object getAttribute(String index){
    根据index去B-Z的值返回
    }
    可以直接向index传B或C之类的,通过switch决定返回谁
      

  5.   

    class Sample { public string this [int index] { get {return "You passed " + index; } } } 如上定义了Sample类之后,我们就可以把索引器用作某种默认的属性,如下所示: Sample s = new Sample(); Console.WriteLine(s[55]);  
      

  6.   

    对不起,我说明一下,我现在用的如A这个类不是自己写的,是一个CompentArt Web UI的NavBar的控件。
      

  7.   

    晕倒
    那也可以从它继承,然后再加上getAttribute函数啊
      

  8.   

    class A1 extends A{……public Object getAttribute(String index){
    根据index去B-Z的值返回}
      

  9.   

    实际情况是这样的,
    我使用的是第三方控件ComponetArt Web UI的NavBar控件,我想通过不同的各组数据来达到改变NavBar导航菜单的样式:
    这里假设有两个数据源:
    Hashtable a = new Hashtable();
    a.Add("Hight","100");
    a.Add("Width","200");
    a.Add("color","red");Hashtable b = new Hashtable();
    b.Add("FullExpand","true");
    b.Add("Hight","800");public InitNavBar(NavBar navBar1, Hashtable ht)
    {
       for(i=0; i< ht.count;i++)
       {
          如果传进来的是a Hashtable,我想动态的指出是给NavBar的Width、Hight、Color属性附值;
          如果是b,就对FullExpand、Hight两个属性附值
       }
    }
      

  10.   

    这和B...Z的类型有关,如果它们是引用类型(.net中的类都是引用类型),假设B的类型为TypeB,那可以直接用 TypeB tmp = A.B;
    但如果是值类型(.net中的简单数据类型都是值类型),则需用到引用关键字ref,例如ref int tmp = A.B;
      

  11.   

    public object GetP( object o , string str )
    {
             Type t = o.GetType();
    System.Reflection.PropertyInfo p = t.GetProperty(str);
    object v =  p.GetValue( this , null );
    return v;
    }
      

  12.   

    java里反射肯定能解决这个问题
    但是c#不是很清楚
    我觉得要是需要用反射来解决的话,还不如挨个复制代价小
    关于反射你看看这里,说的很清晰简单
    http://www.delphibbs.com/keylife/iblog_show.asp?xid=13205
      

  13.   

    sorry 
    object v =  p.GetValue( this , null );
    ========>
    object v =  p.GetValue( o , null );
      

  14.   

    hdt(倦怠) 
    .net下反射控制比java简单啊你的程序倒了
    人家要set
    哈哈