【C#】ToArray的使用
在 C# 中,ToArray 方法通常用于将实现了 IEnumerable<T> 接口的集合(如 List<T>)转换为数组。这个方法是 LINQ 提供的一个扩展方法,位于 System.Linq 命名空间中。因此,在使用 ToArray 方法之前,请确保已经在文件顶部添加了 using System.Linq;。
将 List<int> 转换为 int[]
 
using System;
using System.Collections.Generic;
using System.Linq; // 引入 System.Linq 命名空间class Program
{static void Main(){List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };int[] numbersArray = numbers.ToArray(); // 使用 ToArray 方法Console.WriteLine("数组长度:" + numbersArray.Length);foreach (var number in numbersArray){Console.Write(number + " ");}}
}将自定义对象的 List<T> 转换为数组
 
假设有一个自定义类 Person,并且你想将一个 List<Person> 转换成 Person[] 数组。
using System;
using System.Collections.Generic;
using System.Linq;class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){List<Person> people = new List<Person>{new Person { Name = "Alice", Age = 30 },new Person { Name = "Bob", Age = 25 }};Person[] peopleArray = people.ToArray();foreach (var person in peopleArray){Console.WriteLine($"姓名: {person.Name}, 年龄: {person.Age}");}}
}其他转换方法
ToList()
- 这是另一个 LINQ 扩展方法,用于将实现了 IEnumerable<T>接口的对象转换为List<T>。
int[] numbersArray = { 1, 2, 3, 4, 5 };
List<int> numbersList = numbersArray.ToList();Cast<TResult>()
- 当你需要将非泛型的 IEnumerable转换为泛型版本时使用。它尝试将集合中的每个元素都转换为你指定的类型。
ArrayList list = new ArrayList() { 1, 2, 3 };
IEnumerable<int> intEnumerable = list.Cast<int>();OfType<TResult>()
- 类似于 Cast<TResult>(),但它只会返回那些能够成功转换为目标类型的元素,不会抛出异常。
ArrayList list = new ArrayList() { 1, "two", 3 };
IEnumerable<int> intEnumerable = list.OfType<int>();
注意事项
- 引入命名空间:记得引入 System.Linq命名空间以使用ToArray方法。
- 性能考虑:每次调用 ToArray()都会创建一个新的数组,并将原始集合中的元素复制到新数组中。如果处理的是大型集合,频繁调用此方法可能会影响性能。
- 只读性:转换后的数组与原集合是分离的,这意味着对其中一个的修改不会影响另一个。
-  线程安全:如果在多线程环境中操作集合或数组,请确保采取适当的同步措施。例如,使用 lock关键字或其他并发控制机制来防止数据竞争。
-  不可变性:一旦通过 ToArray()或ToList()创建了一个新集合,对原集合的修改不会影响到新集合,反之亦然。这对于希望隔离数据变化的情况很有用,但也要注意不要误以为对一个集合的更改会影响到另一个。
-  兼容性和类型安全:在使用 Cast<TResult>()和OfType<TResult>()时要注意目标类型是否与源集合中的元素兼容,以避免运行时错误。
总之,ToArray() 是一个非常实用的方法,能够简化从集合到数组的转换过程,适用于需要数组作为参数的情况或当你希望以固定大小的形式存储数据时。
