【问题标题】:LINQ in foreach Head [duplicate]foreach Head 中的 LINQ [重复]
【发布时间】:2021-09-14 07:08:09
【问题描述】:

简短的问题 当我在 foreach 标头中使用 Linq 查询时,它会一遍又一遍地构建。 还是先列出清单然后再通过它更好? 例如:

  List<WashObjectReservationModel> reservations = washObjManager.GetReservations(currentProductionType);

                    if (reservations.Any(x => washObject.PreparationJob.PartTypes.Select(y => y.Number).Contains(x.PartType.Type)))
                    {
                        bool validForProduction = true;
                        foreach (var partType in washObject.PreparationJob.PartTypes.Where(x => reservations.Select(y => y.PartType.Type).Contains(x.Number)))
                        {
                            StoragePositionResult typePos = storageManager.GetPosition(partType.Number, StorageType.Cleaned, washObject.PreparationJob.CreateDate);

                            validForProduction = typePos.WashObject == null;

                            if (validForProduction)
                            {
                                logger.Info($"WashObject \"{washObject.Number}\" is required at production with PartType {partType.Number}");

                                break;
                            }
                        }

【问题讨论】:

标签: c# linq


【解决方案1】:

您可能会担心,因为在经典的 for 循环中,终止条件 在每次迭代时都会被评估:

for (var i = 0; i < someExpensiveComputation(); i++) ...

foreach 循环中的情况并非如此:表达式被评估一次以在您的 LINQ 查询上创建一个枚举器,然后对其进行迭代。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2016-09-30
    • 2019-07-22
    • 2013-06-01
    • 2012-04-02
    • 1970-01-01
    • 2016-09-08
    • 2019-02-11
    • 2013-10-02
    相关资源
    最近更新 更多