C# Linq的ToList()方法 – 将序列转换为列表

  • Post category:C#

C# Linq(Language Integrated Query)是一种基于.NET Framework的查询技术,使用Linq,可以简化数据查询,使代码更简洁易读。而ToList()则是Linq中最基本的方法之一,它可以将一个IEnumberable集合转化为一个List列表。接下来,我将为大家介绍ToList()的完整攻略。

1. ToList()的语法

ToList()是一个扩展方法(Extension Method),需要使用System.Linq命名空间。其语法格式如下:

Enumerable.ToList<TSource>(IEnumerable<TSource>)

参数说明:

  • TSource:集合中元素的类型
  • IEnumerable:要转化为List列表的集合对象

返回值类型:List

2. 使用ToList()的示例

下面简单介绍两个使用ToList()的示例。

示例一

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };
List<int> newList = numbers.Where(n => n % 2 == 0).ToList();

以上示例中,首先创建了一个包含1到5的整数列表,然后使用Where()方法筛选出列表中的偶数项,并使用ToList()方法将筛选结果保存为新的List列表。

示例二

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Person> persons = new List<Person>()
{
    new Person{Name="Tom", Age=18},
    new Person{Name="Jerry", Age=25},
    new Person{Name="Sarah", Age=30},
    new Person{Name="Peter", Age=22},
};

List<string> nameList = persons.Select(p => p.Name).ToList();

以上示例中,首先创建了一个包含Person对象的List列表,然后使用Select()方法将Person对象中的Name属性提取出来,并使用ToList()方法将提取结果保存为新的List列表。

3. ToList()的注意事项

虽然ToList()方法看似很简单,但在实际使用中还需要注意以下几点:

  • 如果原集合(IEnumerable)为空,则ToList()方法返回的List同样为空(而不是null)。
  • 如果原集合是一个仅能枚举单次的集合(如List、Array),则在ToList()执行完毕后,原集合仍然可以正常枚举。
  • 如果原集合被多个线程同时访问,但ToList()操作是在后台线程上执行的,则可能会出现线程安全问题,需要注意线程同步。