gpt4 book ai didi

c# - 到 ToList() 还是不到 ToList()?

转载 作者:太空狗 更新时间:2023-10-30 00:24:05 41 4
gpt4 key购买 nike

给定在内存中(不是 LINQ to SQL)类列表:

List<MyClass> myItems = /*lots and lots of items*/;

我正在使用 GroupBy() 语句对其进行分组:

myItems.GroupBy(g => g.Ref)

然后立即在 foreach 循环中使用在“组”上调用 .ToList() 有什么不同,还是我应该只使用 IEnumerable

如此完整的代码示例:

使用ToList()

List<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> groupedItemsB = new List<List<MyClass>>();

List<MyClass> myItems = /*lots and lots of items*/;
List<IGrouping<string, MyClass>> groupedItems = myItems.GroupBy(g => g.Ref).ToList();
foreach(IGrouping<string, MyClass> item in groupedItems)
{
if (/*check something*/)
{
groupedItemsA.Add(item.ToList());
}
else
{
groupedItemsB.Add(item.ToList());
}
}

使用IEnumerable

List<List<MyClass>> groupedItemsA = new List<List<MyClass>>();
List<List<MyClass>> groupedItemsB = new List<List<MyClass>>();


List<MyClass> myItems = /*lots and lots of items*/;
IEnumerable<IGrouping<string, MyClass>> groupedItems = myItems.GroupBy(g => g.Ref);
foreach(IGrouping<string, MyClass> item in groupedItems)
{
if (/*check something*/)
{
groupedItemsA.Add(item.ToList());
}
else
{
groupedItemsB.Add(item.ToList());
}
}

这些“under the hood”的执行计划有什么区别吗?这两种方法会更有效还是真的无关紧要?

在此之后我使用groupedItems列表。

最佳答案

是的,这是有区别的,而且可能很重要。

ToList() 将迭代并将每个迭代项追加到新列表中。这具有创建消耗内存的临时列表的效果。

有时您可能想要承受内存损失,尤其是当您打算多次迭代列表并且原始列表不在内存中时。

在您使用 ToList() 的特定示例中,您实际上最终迭代了两次 - 一次是构建列表,第二次是在您的 foreach 中。根据列表的大小和您的应用程序,这可能是也可能不是问题。

关于c# - 到 ToList() 还是不到 ToList()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29984957/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com