容器
在C#中,容器通常指的是用于存储和组织数据的集合类。
本文介绍的容器是动态数组:List<T> 内部使用数组来存储元素,当添加元素超出当前数组容量时,会自动调整大小(扩容)。
list容器
List<>是 C# 中的泛型集合容器,全称为 List<T>,其中 <T> 表示类型参数,允许你指定存储在列表中的元素的类型。List<T> 提供了丰富的方法和属性来操作集合中的元素,包括添加、删除和搜索等。
创建List列表
List<要存放的数据类型> List列表名 = new List<要存放的数据类型>();
List<int> listNum = new List<int>();List基本操作
添加元素 Add()
            listNum.Add(1);
            listNum.Add(2);
            listNum.Add(3);
            listNum.Add(4);
            listNum.Add(5);
            listNum.Add(5);通过 Add 方法,将内容存储到List中去。
获取容器大小 Count
            int count = listNum.Count; 
            Console.WriteLine(count);    //6访问元素 [索引]
容器名称[索引]
            Console.WriteLine(listNum[1]);    //2遍历元素 for和foreach
数组的两种遍历方式在List的遍历中同样适用。
            for (int i = 0; i < listNum.Count; i++)
            {
                Console.WriteLine(listNum[i]);
            }
            foreach (int _num in listNum)
            {
                Console.WriteLine(_num);
            }
检查元素是否存在 Contains()
Contains()是一个布尔类型的方法,当相关内容存在时,返回true,不存在时,返回false。
            //包含
            if (listNum.Contains(1))
            {
                Console.WriteLine("包含1");
            }拷贝元素 GetRange()
GetRange(i , j)是将一个List列表从第 i 位开始,拷贝 j 个元素到新的List列表上的方法。
下面展示将列表全拷贝到新的列表上面。
            List<int> listTemp = listNum.GetRange(0, listNum.Count);
            foreach (int _num in listTemp)
            {
                Console.WriteLine(_num);
            }索引查找元素 Index()
返回第一个找到的item索引,如果没有找到就返回-1。
            int Index1 = listNum.IndexOf(5);移除元素
移除在x位上的元素 RemoveAt(x)
            listNum.RemoveAt(1);        //移除在第n位上的元素
            foreach (int _num in listNum)
            {
                Console.WriteLine(_num);
            }
从第x个开始,移除y个 RemoveRange(x, y)
            listNum.RemoveRange(1, 2);  //从第几个开始,移除几个
            foreach (int _num in listNum)
            {
                Console.WriteLine(_num);
            }
清除值为x的元素 Remove(x)
            listNum.Remove(4);
            for (int i = listNum.Count; i > 0; i--)
            {
                if (listNum[i] == 5)
                {
                    listNum.RemoveAt(i);
                }
            }
            for (int i = 0; i < listNum.Count; i++)
            {
                Console.WriteLine(listNum[i]);
            }
清除所有的元素 Clear()
            listNum.Clear();            //清除所有的元素
            Console.WriteLine(listNum.Count);    //0转变数组 ToArray()
            int[] arrNum = listNum.ToArray();   //转换为数组
            for (int i = 0; i < arrNum.Length; i++)
            {
                Console.WriteLine(arrNum[i]);
            }
其他
Remove() 倒序循环问题
因为list是一个动态数组,并且会在Remove移除当前的元素之后改变数组大小,然后进行i++。这样就漏检查一个元素,万一这个元素也是想要移除的,就得再执行一次移除,这样很麻烦,所以,倒序循环就能规避这一点,元素一消除,索引发生改变,但是 i 之前的索引没有发生改变,所以,i 能完美的遍历所有的元素。
原本的正序循环也可以改进,将 i++ 放在else当中,当元素被移除时,i 不实现自加1操作就可以了。
            listNum.Remove(4);
            for (int i = 0; i < listNum.Count;)
            {
                if (listNum[i] == 5)
                {
                    listNum.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }
            for (int i = listNum.Count; i > 0; i--)
            {
                if (listNum[i] == 5)
                {
                    listNum.RemoveAt(i);
                }
            }哈希值
哈希值通常指的是通过哈希函数对数据(如字符串或数字)进行处理后得到的一个固定长度的数值,这个数值通常用于快速比较和检索数据。
            int num = 5;
            int hashCode = num.GetHashCode();
            Console.WriteLine(hashCode);
            Console.WriteLine(listNum.GetHashCode());












![[FBCTF2019]RCEService (PCRE回溯绕过和%a0换行绕过)](https://i-blog.csdnimg.cn/direct/ed5f04508d4041af82c9770d26abed10.png)





