改进的ArrayList

    因为项目需求,我要写一个比较复杂的算法,先谷歌之,还真给我找到一个相同的算法,哈哈,不用这么麻烦自己写算法了,爽!但是在网上找到的源代码为C++写就,里面有不少动态数组的使用,于是我想当然的用ArrayList替代之,但……结果却发现有问题!仔细一看,原来C++里采用了CArray,可以直接使用myArr[5] = 5;这种赋值方式,而不用先对index1至4赋值。。。C#里的ArrayList显然没有这种功能。。。

    无奈,自己开动脑筋,对ArrayList作了如下改进:

 class MyArrayList
 {
  private ArrayList data = new ArrayList();

  public MyArrayList()
  {
  }


  public Object this[int idx]
  {
   get
   {
    if (idx > -1 && idx < data.Count)
    {
     return (data[idx]);
    }
    else
    {
     throw new InvalidOperationException("[MyArr.set_Item] Index out of range");
    }
   }
   set
   {
    if (idx > -1 && idx < data.Count)
    {
     data[idx] = value;
    }
    else if (idx == data.Count)
    {
     data.Add(value);
    }
    else if (idx > data.Count)
    {
     for (int i = data.Count; i < idx; i++)
     {
      data.Add(null);
     }
     data.Add(value);
    }
    else
    {
     throw new InvalidOperationException("[MyArr.set_Item] Index out of range");
    }
   }
  }

  public int Count
  {
   get
   {
    return data.Count;
   }
  }

  public void Add(Object obj)
  {
   data.Add(obj);
  }

  public Array ToArray(Type type)
  {
   if (type == null)
   {
    throw new ArgumentNullException("type");
   }
   Array array1 = Array.CreateInstance(type, data.Count);
   array1 = data.ToArray(type);
   return array1;
  }
 }

 这样改进之后,使用起来就既可以用ArrayList的方法,如Add啊,ToArray啊之类的,也可以用myArr[5] = 5;之类的语句直接对某个特定的元素进行赋值了,然后只要把原文中的ArrayList替换为MyArrayList即可

  附使用例程:

   MyArrayList myArr = new MyArrayList();
   myArr[1] = "bbb";  //如果使用ArrayList,这里会报错

   if (myArr[0] != null)
   {
    Console.WriteLine(myArr[0].ToString());
   }
   if (myArr[1] != null)
   {
    Console.WriteLine(myArr[1].ToString());
   }

   myArr[0] = "ccc";

   string[] temp = (string[])myArr.ToArray(typeof(string));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值