现在有一个list<object>myList1,它有5000个数据,想通过索引器设置其中每个元素
如何设置?
另外有一个list<object>myList2,它是由list1 copy来的,想通过索引器设置get来判断mylist1中的每个元素是否发生变换,
如果发生变化,如用户更改mylist1中任何一个元素值后,能通过get属性提示或者得到某个元素值发生变化。请问这个索引器如何设置??谢谢!

解决方案 »

  1.   

    你说的那个数据结构叫做数组,List是一个链表。
    请选择合适的数据结构来做操作。
      

  2.   

    链表就不行吗?
    为链表的每一个元素设置set和get怎么设置?
      

  3.   


    List也可以当做数组操作。
      

  4.   

    本帖最后由 bdmh 于 2012-04-20 14:24:39 编辑
      

  5.   

    myList1[0]直接是可以设置的,但是全部设置的话如何做呢?
    不可能把链表的元素一一列举吧。
    后面的问题,能否给出例子?谢谢!
      

  6.   

    通过索引器设置,直接 myList1[0]
    后面那个问题,可能需要你自己封装一个类,里面包含一个list,然后设置索引器属性,访问的都是内部list的item,set方法时提示
      

  7.   

    对csdn太失望了
    以前不是这样的 
    大家都踊跃发言讨论,现在都没有人回答了(当然我只是询问指点,并非做题)
    有些牛人说个两三句似懂非懂,不晓得是不屑回答呢还是故意装牛人
      

  8.   

    首先List<T>就可以用索引访问
    其次 这个泛型类 可以设置是否修改的属性来判断
      

  9.   

    有一个扩展方法ElementAt可以满足你的需求,注意它在System.linq命名空间里
      

  10.   

    4楼和7楼的意思是你可以直接像操作数组那样获取/设置list指定索引处的元素,因为list有一个.item属性,当然用linq里的两个扩展方法也可以实现
    另外我想问你copy第一个list就是为了监视它的变化?
      

  11.   

    有人喜欢原封不动的复制他人回复,例如7楼,BS这样的人。楼主你的问题真的是没有表述清楚,我只看到你的myList1在使用,myList2复制出来后,未曾用到,那你提到它干嘛的?而你又提到Get操作,这个本身就很奇怪,显然应该是Set操作才对,Set时进行对比,发生变化记录。最后要说的是,不是自己定义的类型,如何定义Get、Set操作?显然应该自定义一个继承IList<T>接口的类来实现自定义的Get、Set操作才行。
      

  12.   

    谢谢 你的回答。
    具体实现类似这样的功能:
    private int mytemp=10;
    private int i_temp=10;
    public int I_temp
    {
       get
       {
          return i_temp;
       }
       set
       { 
          if(i_temp!=mytemp)
          {
             MessageBox.show("数值不相等,已发生变化");
          }
          mytemp=value;
        }
    }
    上面的代码是实现了对一个数值发生变化进行的检测
    但是如果有一个链表List<int>,要对其中的每一个元素进行类似的检测,如何设置呢?可能我的表述不是很清楚,不好意思
    谢谢大家给出指点提示!!
      

  13.   


    是这样的
    关键是如何实现get中return的值
      

  14.   

    一样的啊:        public class MyList<T> : IList<T>
            {
                T IList<T>.this[int index]
                {
                    get
                    {
                        throw new NotImplementedException();
                    }
                    set
                    {
                        throw new NotImplementedException();
                    }
                }
                ..............
            }
      

  15.   

    那我给一个最简单的,直接继承List<T>,可以少写很多代码。    public class MyList<T> : List<T> where T : struct
        {
            public new T this[int index]
            {
                get
                {
                    return base[index];
                }
                set
                {
                    //这里限定了T为结构体,所以不会出现为空的情况,可以免除为空判断
                    if (!base[index].Equals(value))
                    {
                        MessageBox.Show("数值不相等,已发生变化");
                        base[index] = value;
                    }
                }
            }
        }调用
    MyList<int> tmp = new MyList<int>() { 1, 2, 3 };
    tmp[0] = 1;//没有提示,因为值未发生变化
    tmp[0] = 2;//提示了,值发生改变
      

  16.   

    public  T this[int index]
    貌似LZ只是对这个语法不清楚
      

  17.   

    谢谢,确实能实现!
    如果不是int型,而是string型呢?好像不行哦,那如果是dictionary型又怎么实现呢?
      

  18.   

    谢谢,确实能实现!
    如果不是int型,而是string型呢?好像不行哦,那如果是dictionary型又怎么实现呢?
      

  19.   

    要支持非结构体,首先那个where T: struct的限制要去掉,
    然后修改if (!base[index].Equals(value)),对各种类型充分考虑如何比较,具体代码我不写了。
      

  20.   

    string型已经解决,Dictionary类型还是不行
    大侠给指点指点吧!我把分值都给你哦!!
    谢谢,这次学到了很多的东西!!
      

  21.   

    感谢青龙白虎,我高了一下午还是没有把dictionary的弄明白
    能否再指点一下啊?谢谢