C# 自定义简单的IList

最近在学C#,就手动写了一个IList

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WorkTwo
{
    /// <summary>
    /// 自定义List
    /// </summary>
    /// <typeparam name="T">泛型</typeparam>
    public class MyList<T>
    {
        //数据
        private T[] datas;

        /// <summary>
        /// 总条数
        /// </summary>
        public int Count { get; set; }
        /// <summary>
        /// 当前下标
        /// </summary>
        private int index;

        /// <summary>
        /// 初始化
        /// </summary>
        public MyList()
        {
            this.datas = new T[16];
            this.Count = 0;
            this.index = -1;
        }
        /// <summary>
        /// 获取下标值
        /// </summary>
        /// <param name="index">下标</param>
        /// <returns></returns>
        public T Get(int index)
        {
            if(index > this.datas.Length || index < 0)
            {
                throw new Exception("数组越界");
            }
            return this.datas[index];
        }
        /// <summary>
        /// 获取元素下标
        /// </summary>
        /// <param name="value">元素值</param>
        /// <returns></returns>
        public int IndexOf(T value)
        {
            for(int i = 0; i <= this.index; i++)
            {
                if(this.datas[i].Equals(value))
                {
                    return i;
                }
            }
            return -1;
        }
        /// <summary>
        /// 添加元素
        /// </summary>
        /// <param name="value">元素值</param>
        public void Add(T value)
        {
            //当空间满时,则扩大原来的2倍
            if(this.index >= this.datas.Length)
            {
                T[] copys = new T[datas.Length];
                Array.Copy(this.datas, copys, this.datas.Length);
                this.datas = new T[this.datas.Length * 2];
                Array.Copy(copys, this.datas, copys.Length);
            }
            this.datas[++this.index] = value;
            this.Count++;
        }
        /// <summary>
        /// 移除元素
        /// </summary>
        /// <param name="value">元素值</param>
        public void Remove(T value)
        {
            int index = IndexOf(value);
            if(index != -1)
            {
                for (int i = index + 1; i <= this.index; i++)
                { 
                    this.datas[i - 1] = this.datas[i];
                }
                this.index--;
                this.Count--;
            }
        }
        /// <summary>
        /// 清空值
        /// </summary>
        public void Clear()
        {
            this.index = -1;
            this.Count = 0;
            Array.Clear(this.datas, 0, this.datas.Length);
        }

    }
}
发布了21 篇原创文章 · 获赞 0 · 访问量 618

猜你喜欢

转载自blog.csdn.net/Stodger0216/article/details/102839038