Я перечисляю свой IEnumerable <T>n раз? - PullRequest
0 голосов
/ 06 мая 2020

Мне довольно комфортно с LINQ в c#, но я не понимаю, вызывает ли мой foreach l oop чрезмерное перечисление.

Предполагая, что следующий фрагмент кода является run,

var listOfStuff = new List<CustomObject>
{
    new CustomObject { Id = 1, Cost = 20M },
    new CustomObject { Id = 2, Cost = 11M },
    new CustomObject { Id = 3, Cost = 3.75M },
    new CustomObject { Id = 4, Cost = 50.99M }
};
var newObjects = listOfStuff.Select(thing =>
    new AnotherObject { Id = x.ID, NegaCost = decimal.Negate(x.Cost) });

foreach (var i in n) // a list of objects with a length of n
{
   var match = newObjects.Where(PreDefinedPredicate);
   i.DoSomethingWith(match);
}

- это новый AnotherObject экземпляр, который создается n раз, или я неправильно понимаю концепцию множественных перечислений?

1 Ответ

3 голосов
/ 06 мая 2020

Это зависит от того, что вы делаете с match в i.DoSomethingWith, но если вы повторяете его там, тогда да.

Вы всегда можете проверить свое предположение, вводя некоторый побочный эффект, например Console.WriteLine:

var newObjects = listOfStuff.Select(x =>
    {
         Console.WriteLine($"Here with id: {x.Id}"); // SIDEEFFECT
         return new AnotherObject { Id = x.ID, NegaCost = decimal.Negate(x.Cost) };
    });

foreach (var i in n) // a list of objects with a length of n
{
   var match = newObjects.Where(PreDefinedPredicate);
   i.DoSomethingWith(match);
}
...