在 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 接口的方法或属性的参数。
总结
代码示范:
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;