我有一个函数叫joinMember(SAAmembership memb, int years)memb是一个对象,years是加入几年的会员
我想利用字典来对memb下的成员进行访问,这个对象下面有如下几个变量M_10_11,M_11_12,M_13_14,M_14_15。
我是这么做的:
Dictionary<int, int> yearmem = new Dictionary<int, int>();
            
            yearmem.Add(2010, memb.M_10_11);
            yearmem.Add(2011, memb.M_11_12);
            yearmem.Add(2012, memb.M_11_12);
            yearmem.Add(2013, memb.M_13_14);
            yearmem.Add(2014, memb.M_14_15);
             yearmem[2010] = 1;但是我发现memb.M_10_11的值并没有发生改变,
请问这是为什么?谢谢

解决方案 »

  1.   


    为什么要变?我想你是受了那些用c/c++指针来说事的做法的毒害。这不是c,把握好这个就能用正常的.net观点看待这个结果。
      

  2.   

    那我该怎么解决这个问题呢,这个问题是
    我有一个对象就像memb,它下面有很多字段,我想利用一种东西把这些字段进行编号,然后通过编号来进行控制这些字段,请问该如何实现呢?谢谢
      

  3.   

    Hashtable类是你需要的,不过这样来做是不是得不偿失。哈,或许应该换个思路哈,你最终的目的是什么呢?
      

  4.   

    反射.
    using System.Reflection; static void Main(string[] args)
            {
                Member m = new Member();
                PropertyInfo[] props = m.GetType().GetProperties();
                int i = 0;
                foreach (PropertyInfo p in props)
                {
                    if (p.Name.IndexOf("property") >= 0)
                    {
                        p.SetValue(m,i.ToString() , null);
                    }
                    else if (p.Name=="JoinYear")
                    {
                        p.SetValue(m, "2012", null);
                    }
                    i++;
                }
                Console.ReadKey();
            }class Member
     class Member
        {
            public string JoinYear { get; set; }
            public string propertyA { get; set; }
            public string propertyB { get; set; }
            public string propertyC { get; set; }
            public string propertyD { get; set; }
            public string propertyE { get; set; }
            public string propertyF { get; set; }
            public string propertyG { get; set; }
        }
      

  5.   

    yearmem[2010] = 1;
    如此赋值,在字典yearmem中肯定有对应的(2010,1)这个键值对。
    只是mem对象的成员值是不会改变的。建议把字典的值类型定义为mem类,yearmem<int,mem>
    如果你觉得mem成员太多太烦,可能把成员定义为属性进行读取,那样就简洁了。
    public string M1011
    {
    get{}
    set{}
    }
      

  6.   

    我的目的是
    我有一个类叫SAAmembership,它下面有字段M_10_11,M_11_12,M_12_13,M_13_14以此类推
    class SAAmembership
    {
        public int M_10_11;
        public int M_11_12;
        public int M_12_13;
        public int M_13_14;
        ...
        ...
    }每个字段代表一个年度,如M_10_11代表2010年到2011年之间的会员,以此类推,它的值只有两个一个是1代表是另一个是0代表不是。我的程序想查询这个人是否是当前会员,如果是,则延长一年会员,如果不是,则给他注册成当前年度的会员。因为字段太多,所以我想给他们编号,然后通过编号来灵活控制这些字段,以提供更强的控制功能并且能够对这些字段进行赋值和读取。
      

  7.   

    这个类设计真囧啊..
    毫无扩展性,可维护性可言这个需求不能用一个类来放置所有的东西.
    需要使用数据库(广义的)存下来的你分成多笔资料储存可以解决你提到的两个问题:
    1.会员资格,年限的变更
    2.灵活控制字段值.你只需要创建一个会员年度资格表(可以放置在DB,XML等地方)
    以下是一个最简例子,栏位可以随你需求扩展
    会员编号 + 会员姓名 + 年度 (如果你有会员主档表,会员姓名冗余,可以去掉)   
    用来放置会员年度资格信息.只要某会员当前年度在该表就有资料就延长一年,新增一笔资料
    如果没有,直接新增当前年度的资料.至于灵活性,直接用查询语句操作,可以定位到你需要的任意资料.PS:lz看下我之前那楼给出的反射,根据类属性名称来给该属性赋值的例子,能够满足你想要根据属性名来赋值/取值