如何在 C# 中将 IEnumerable 转换为 List 以及将 List 转换回 IEnumerable?

在 C# 中,IEnumerable 和 List 都是常见的集合类型。IEnumerable 是一个接口,定义了一个只读的序列,可以在该序列上进行简单的迭代操作。而 List 是一个可变大小的动态数组,可以在其末尾添加或删除元素。由于 List 实现了 IEnumerable 接口,因此 List 可以作为 IEnumerable 集合的类型使用。

本文将介绍如何在 C# 中将 IEnumerable 转换为 List 以及将 List 转换回 IEnumerable。

1. 如何将 IEnumerable 转换为 List

要将 IEnumerable 转换为 List,可以使用 List 的构造函数,将 IEnumerable 中的元素逐个添加到 List 中。以下是使用该方法的示例代码:

IEnumerable<int> enumerable = new List<int>{ 1, 2, 3 };

List<int> listFromEnumerable = new List<int>(enumerable);

在上面的代码中,我们首先定义了一个 IEnumerable 对象 enumerable,并将其初始化为一个包含数值 1、2、3 的 List 对象。然后,我们使用 List 构造函数将 enumerable 转换为 List 对象。最终,listFromEnumerable 变量将包含与 enumerable 相同的元素。

另外,.NET Framework 还提供了一个非常方便的扩展方法 ToList(),可以将任何实现了 IEnumerable 接口的对象转换为 List 对象。以下是使用 ToList() 方法的示例代码:

IEnumerable<int> enumerable = new List<int>{ 1, 2, 3 };

List<int> listFromEnumerable = enumerable.ToList();

上述代码与前一示例相同,只是我们使用了 ToList() 扩展方法来转换 IEnumerable 为 List。

1.1 注意事项

在使用 IEnumerable 转换为 List 的过程中,需要注意以下几点:

在为 List 对象分配内存的过程中,可能会造成一些性能开销,特别是在对较大的 IEnumerable 类型进行转换时。

IEnumerable 对象会逐个枚举其元素。因此,如果对 IEnumerable 进行多次迭代,则需要对其进行多次枚举。而将 IEnumerable 转换为 List 则不需要做到这点。

2. 如何将 List 转换为 IEnumerable

要将 List 转换为 IEnumerable,只需将 List 对象传递给 IEnumerable 接口即可。以下是使用此方法的示例代码:

List<int> list = new List<int> { 1, 2, 3 };

IEnumerable<int> enumerableFromList = list;

在上面的代码中,我们首先定义了一个 List 对象 list,并将其初始化为一个包含数值 1、2、3 的 List 对象。然后,我们将其传递给 IEnumerable 接口,以便将其转换为 IEnumerable 对象。最终,enumerableFromList 变量将包含与 list 相同的元素。

2.1 注意事项

在使用 List 转换为 IEnumerable 的过程中,需要注意以下几点:

由于 IEnumerable 接口是只读的,因此无法通过 enumerableForList 变量修改 list 集合中的元素。

由于 List 对象是 IEnumerable 接口类型,可以将其作为任何使用 IEnumerable 接口的方法或属性的参数。

总结

和 List 都是在 C# 中常见的集合类型。虽然两者之间可以相互转换,但应根据具体的业务需求进行选择。如果希望在使用 IEnumerable 集合时获得更好的性能,可以将 IEnumerable 转换为 List。然而,这可能会产生一些性能开销,特别是在对较大的 IEnumerable 类型进行转换时。如果需要将 List 传递给使用 IEnumerable 接口的方法或属性,则可以将其转换为 IEnumerable。无论是哪种方法,都应该注意其引起的潜在性能影响以及其所带来的限制和约束。

代码示范:

IEnumerable<int> enumerable = new List<int>{ 1, 2, 3 };

List<int> listFromEnumerable = new List<int>(enumerable);

IEnumerable<int> enumerable = new List<int>{ 1, 2, 3 };

List<int> listFromEnumerable = enumerable.ToList();

List<int> list = new List<int> { 1, 2, 3 };

IEnumerable<int> enumerableFromList = list;

后端开发标签