【问题标题】:Is it worth to convert IEnumerable to Array/List in C#? [closed]在 C# 中将 IEnumerable 转换为 Array/List 是否值得? [关闭]
【发布时间】:2022-01-24 08:38:18
【问题描述】:

我在想是否值得在我的函数中将 querable 更改为 array/list,这会在参数中采用一个集合,然后通过各种 linq 语句逐步减少该集合(但不是全部合二为一)。

所以我的问题是值得每次将IEnumerable 变量转换为具有.ToArray() 扩展名的数组,尽管我只想使用该变量一次?

我读到 querable 与.Count 一起工作(性能)效果不佳(我在每个下一个 linq 语句中使用一个计数,并根据先前的变量创建新的、减少的集合),所以很难决定哪个更好。

我使用的集合是这样的:IReadOnlyCollection<XYZ> infos

后来:

                var positionsWithCoordinates = infos.Where(t => t.Long.HasValue && t.Lat.HasValue).ToArray();

                if (positionsWithCoordinates.Length < infos.Length)
                {
                    Logger.Warn(m => m("xyz \n ({0})", posWithCoordinates.Where(p => !infos.Contains(p)).ToString()));
                }

                var previousTrips = new List<xyz>();
                foreach (var trip in posWithCoordinates)
                {
                    previousTrips.Add(await context.TrackerTrips
                       .Where.Where.Where.OrderBy.ConfigAwait
                }

                var validDataTrips = previousTrips.Where(l => l.Lat.HasValue || l.Long.HasValue).ToArray();
                if (validDataTrips.Length < previousTrips.Count)
                {
                }

等等。等等,我创建了许多新变量,但几乎与上面的逻辑相同。

【问题讨论】:

  • 我们无法真正回答这个问题,因为我们不知道您的方法是做什么的,它在系统中的使用方式,支持数据的托管方式等等。与许多事情一样,答案是“这取决于”。您有具体的示例可以详细说明吗?
  • 请展示一些代码来演示您使用IQueryables 所做的事情。
  • 取决于你打算用它做什么。

标签: c# arrays linq ienumerable


【解决方案1】:

我们在 Ienumarable 和 Ilist 之间有很多差异,你可以将 Enumarable 转换为 list 或 toarray enumarable 基本上,它有一个方法来获取集合中的下一个项目。它不需要整个集合都在内存中,也不知道其中有多少项目,foreach 只是不断获取下一个项目,直到用完为止。

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2010-09-07
    • 1970-01-01
    • 2020-12-22
    • 2021-12-02
    相关资源
    最近更新 更多