猿教程 Logo

C# List<T>

您已经在前面的课程中了解了ArrayList。 ArrayList随其增长自动调整大小。 List <T>集合与ArrayList相同,除了List <T>是泛型集合,而ArrayList是非泛型集合。

List<T>可以以下面两种方式初始化。


相关实例:

List<int> intList = new List<int>();

//Or

IList<int> intList = new List<int>();

在上面的例子中,第一个语句使用List类型变量,而第二个语句使用IList类型变量来初始化List。 List <T>是IList <T>接口的具体实现。 在面向对象编程中,建议编程到接口而不是具体类。 因此,使用IList <T>类型变量创建List <T>的对象。

List <T>包含比IList <T>接口更多的帮助方法。 下表显示了List <T>的重要属性和方法,它们使用List <T>初始化:

属性描述
Items获取或设置指定索引处的元素
Count返回List<T>中存在的元素总数


方法描述
Add在List<T>的末尾添加一个元素。
AddRange在List<T>的末尾添加指定集合的元素。
BinarySearch搜索元素并返回元素的索引。
Clear从列表中删除所有元素<T>。
Contains检查List<T>中是否存在指定的元素。
Find根据指定的谓词函数查找第一个元素。
Foreach迭代List<T>。
Insert在List<T>中的指定索引处插入元素。
InsertRange在指定的索引处插入另一个集合的元素。
Remove删除指定元素的第一次出现。
RemoveAt删除指定索引处的元素。
RemoveRange删除与提供的谓词函数匹配的所有元素。
Sort排序所有元素。
TrimExcess将容量设置为实际元素数。
TrueForAll确定List <T>中的每个元素是否与指定谓词定义的条件匹配。



添加元素

使用Add()方法将元素添加到List集合中。 以下示例将int值添加到int类型的List <T>中。

Add()签名:void Add(T item)

IList<int> intList = new List<int>();
intList.Add(10);
intList.Add(20);
intList.Add(30);
intList.Add(40);
IList<string> strList = new List<string>();
strList.Add("one");
strList.Add("two");
strList.Add("three");
strList.Add("four");
strList.Add("four");
strList.Add(null);
strList.Add(null);
IList<Student> studentList = new List<Student>();
studentList.Add(new Student());
studentList.Add(new Student());
studentList.Add(new Student());

您还可以在初始化时使用对象初始化语法添加元素,如下所示:

IList<int> intList = new List<int>(){ 10, 20, 30, 40 };
//Or
IList<Student> studentList = new List<Student>() { 
                new Student(){ StudentID=1, StudentName="Bill"},
                new Student(){ StudentID=2, StudentName="Steve"},
                new Student(){ StudentID=3, StudentName="Ram"},
                new Student(){ StudentID=1, StudentName="Moin"}
            };

AddRange

AddRange()方法添加来自另一个集合的所有元素。

AddRange()方法签名:void AddRange(IEnumerable <T> collection)


相关实例:

IList<int> intList1 = new List<int>();
intList1.Add(10);
intList1.Add(20);
intList1.Add(30);
intList1.Add(40);

List<int> intList2 = new List<int>();

intList2.AddRange(intList1);
重点

AddRange()方法仅适用于使用List <T>变量初始化的情况。 IList <T>不包括AddRange()方法。


访问List集合

使用foreach或for循环来迭代List <T>集合。

List<int> intList = new List<int>() { 10, 20, 30 };
intList.ForEach(el => Console.WriteLine(el));

如果已经使用IList <T>接口初始化了List <T>,那么使用带有隐式类型变量的单独的foreach语句:

IList<int> intList = new List<int>() { 10, 20, 30, 40 };
foreach (var el in intList)
        Console.WriteLine(el);

运行结果:

10 
20 
30 
40

使用索引器访问单个项(即,在方括号中传递索引):

IList<int> intList = new List<int>() { 10, 20, 30, 40 };
int elem = intList[1]; // returns 20

使用Count属性来获取列表中元素的总数。

IList<int> intList = new List<int>() { 10, 20, 30, 40 };
Console.Write("Total elements: {0}", intList.Count);


运行结果:

Total elements: 4

用于循环访问列表如下所示:

IList<int> intList = new List<int>() { 10, 20, 30, 40 };
for (int i = 0; i < intList.Count; i++)
        Console.WriteLine(intList[i]);

运行结果:

10 
20 
30 
40

List <T>实现IList <T>,所以List <T>隐式类型转换为IList <T>。

static void Print(IList<string> list)
{
    Console.WriteLine("Count: {0}", list.Count);
    foreach (string value in list)
    {
        Console.WriteLine(value);
    }
}
static void Main(string[] args)
{
    string[] strArray = new string[2];
    strArray[0] = "Hello";
    strArray[1] = "World";
    Print(strArray);
    List<string> strList = new List<string>();
    strList.Add("Hello");
    strList.Add("World");
    Print(strList);
}

运行结果:

Hello 
World 
Hello 
World

插入元素

Insert()方法将一个元素插入List <T>集合中指定的索引。

Insert()签名:void Insert(int index,T item);

IList<int> intList = new List<int>(){ 10, 20, 30, 40 };
intList.Insert(1, 11);// inserts 11 at 1st index: after 10.
foreach (var el in intList)
        Console.Write(el);

运行结果:

10 
11 
20 
30 
40

删除元素

Remove()和RemoveAt()方法从List <T>集合中删除项目。

Remove()签名:bool Remove(T item)

RemoveAt()签名:void RemoveAt(int index)

IList<int> intList = new List<int>(){ 10, 20, 30, 40 };
intList.Remove(10); // removes the 10 from a list
intList.RemoveAt(2); //removes the 3rd element (index starts from 0)
foreach (var el in intList)
    Console.Write(el);

运行结果:

20 
30

TrueForAll

TrueForAll()是List <T>类的一个方法。 如果指定的条件为true,则返回true,否则返回false。 这里,条件可以被指定为谓词类型deligate或lambda表达式。

TrueForAll()签名:bool TrueForAll(Predicate <T> match)

List<int> intList = new List<int>(){ 10, 20, 30, 40 };
bool res = intList.TrueForAll(el => el%2 == 0);// returns true

以下示例使用isPositiveInt()作为Predicate <int>类型代理作为TrueForAll的参数。

static bool isPositiveInt(int i)
{
    return i > 0;
}
static void Main(string[] args)
{
    List<int> intList = new List<int>(){10, 20, 30, 40};
    bool res = intList.TrueForAll(isPositiveInt);
}
重点
  1. List<T>存储指定类型的元素,它会自动增长。

  2. 列表<T>可以存储多个空元素和重复元素。

  3. List<T>可以分配给IList <T>或List <T>类型的变量。 它提供更多的辅助方法当分配给List <T>变量时

  4. List<T>可以是使用索引器,for循环或foreach语句的访问。

  5. LINQ可以用来查询List <T>集合。

  6. List<T>是存储和检索大量元素的理想选择。



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/Csharp-list-fanx.html