请介绍一下 C# 中将 List<T> 转为数组的常见方式,并比较不同方法的适用场景。
考察说明
考查 C# 集合与数组转换的 API 掌握及场景判断能力。
回答思路
- 【回答框架 1】C# 中 List<T> 转数组最常用的是 List<T>.ToArray() 方法,它返回一个包含列表中所有元素的新数组。
- 【回答框架 2】也可使用 LINQ 的 ToArray() 扩展方法,适用于任何 IEnumerable<T> 序列,包括 List<T>。
- 【回答框架 3】若需转换时进行元素类型转换,可使用 ConvertAll 或 LINQ 的 Select+ToArray 组合,例如 list.ConvertAll(x => x.ToString()).ToArray()。
- 【回答框架 4】对于需频繁转换的场景,注意 ToArray() 会复制元素,产生 O(n) 的时间和空间开销,大列表时需考虑性能。
- 【回答框架 5】若知道列表大小且需批量操作,可先用 List.CopyTo 手动拷贝到预先创建的数组。
- 【关键点 1】ToArray() 是 List<T> 和 LINQ 提供的便捷方法。
- 【关键点 2】ToArray() 创建新数组,不会影响原列表。
- 【关键点 3】用 LINQ 或 ConvertAll 可同时进行元素类型转换。
- 【关键点 4】大列表转换需注意性能。
- 【易错点 1】不建议用 List.CopyTo 时预先分配错误大小的数组。
- 【易错点 2】转换并不修改原列表,若需修改结果会影响原列表,需注意。
- 【易错点 3】元素是引用类型时,复制的是引用,修改对象会影响两个集合。