C# IEnumerable.ToList 与 List.ToList 区别

·

1 min read

关于IEnumerable.ToList() 和一个已经是 List 的集合 ToList(),转换后原来是存在差异的。

IEnumerable.ToList()

var lst1 = new int[] { 1, 2, 3, 4, 5, 6 }.Select(f => new A() { Id = f });
var lst2 = lst1.ToList();
var first1 = lst1.ElementAt(0);
var first2 = lst2.ElementAt(0);

Console.WriteLine($"ToList()之前第一个元素的HashCode:{first1.GetHashCode()}");
Console.WriteLine($"ToList()之后第一个元素的HashCode{first2.GetHashCode()}");
Console.WriteLine($"----->>>结论是,在这种情况下ToList()后,对象被重新创建了");

Console.WriteLine("---------------------------------------------------------");
Console.WriteLine();
Console.WriteLine();

List.ToList()

var lst3 = new int[] { 1, 2, 3, 4, 5, 6 }.Select(f => new A() { Id = f }).ToList();
var lst4 = lst3.ToList();
var first3 = lst3.ElementAt(0);
var first4 = lst4.ElementAt(0);

Console.WriteLine($"ToList()之前第一个元素的HashCode:{first3.GetHashCode()}");
Console.WriteLine($"ToList()之后第一个元素的HashCode:{first4.GetHashCode()}");
Console.WriteLine($"----->>>结论是,后一种情况下ToList()后,对象还是原来的对象");

Console.WriteLine("---------------------------------------------------------");
Console.WriteLine();
Console.WriteLine();

Console.Read();

总结

  • 使用 IEnumerable.ToList() 后,是创建一个新的对象。
  • 使用 List.ToList() 后,还是同一个对象。