有如下的类,要求根据字段名(字符串形式)动态获得该字段的实例引用,大家看看问号的部分该怎么写
    public class test
    {
        public byte a=33;
        public Double b=22;
        public int c;
        public Dictionary<int, object> l = new Dictionary<int, object>();
        public void addtolist(int ID,string FieldName)
        { l.Add(ID,??? );        }    }
   test t = new test();//创建实例
   t.addtolist(1,"b");//集合中加如字段b

解决方案 »

  1.   

    明白你的意思了。不过,为什么不直接这样引用:
    t.addtolist(1,t.b);public void addtolist(int ID,string FieldName) 
    这个改为:
    public void addtolist(int ID,object Field)
    {
        l.Add(ID, Field);
    }抛开这个问题不谈,我感觉你的路子走的有点偏。
    你想用这个办法解决的问题,一定有更好的解决办法。
      

  2.   

    还有一个办法,完全可以达到你的目的,那就是反射。
    但是,反射不能直接操作成员变量,只能调用成员函数。(对成员变量的访问可以通过编写对应的成员函数做到)
    你的l,类型可以改为Dictionary<int, string>,直接保存成员函数的名字
    到要引用成员函数的时候,比如这个成员的名字暂时保存在string member;中,就这样:
    foreach(MethodInfo mi in t.GetType().GetMethods())
    {
        if( mi.Name == member )
        {
            mi.Invoke(t, null);
            break;
        }
    }
      

  3.   

    我的意思是对于加入dictionary中的对象的ID和字段是不一定的,这要在配置文件中生成,运行时添加,比如如下配置表:1,"a"  2,"c" 3,"b"或者
    1,"b"  2,"a" 3,"c"根据这张表来添加对象,大家看怎么办
      

  4.   

    public void addtolist(int ID,string FieldName) 
    {
       //l.Add(ID,??? ); 
       System.Reflection.FieldInfo field = this.GetType().GetField(FieldName);   //add some verification here.
       // then
       l.Add(ID, field.GetValue(this);
      
    } 这里用的是Reflection(反射)机制
      

  5.   

    问题解决,谢谢coldwinter_stone 
      

  6.   

    互相学习.以前学Java时用过Reflect 机制.今天看到你的题目觉得C#中也应该有这样的机制. 就查了查,试了试, 果然也有. 感谢Anders.