This function is supposed to set descending order numbers on an IEnumerable<Order>, but it doesn’t work. Can anyone tell me what’s wrong with it?
private void orderNumberSetter(IEnumerable<Order> orders)
{
var i = 0;
Action<Order, int> setOrderNumber = (Order o, int count) =>
{
o.orderNumber = i--;
};
var orderArray = orders.ToArray();
for (i = 0; i < orders.Count(); i++)
{
var order = orderArray[i];
setOrderNumber(order, i);
}
}
You are re-using
ias loop variable andigets modified in yoursetOrderNumberlambda – don’t modifyi– it’s unclear what you meant to do, maybe the following:If the above is the case you could have achieved that much, much easier though, your code seems unnecessarily complex, i.e:
or even simpler without having to create an array at all:
Edit:
To set descending order numbers, you can determine the number of orders first then go backwards from there:
Above would produce one based order numbers in descending order. Another approach, more intuitive and probably easier to maintain is to just walk the enumeration in reverse order: