Is there a way to write this code more elegantly with a foreach loop? The “create a new entry” logic is thwarting me, because it needs to execute even if pendingEntries contains no items.
ItemDto itemToAdd; // an input parameter to the method
IEnumerator<Item> pendingEntries = existingPendingItems.GetEnumerator();
pendingEntries.MoveNext();
do // foreach entry
{
Item entry = pendingEntries.Current;
if (entry != null) // fold the itemToAdd into the existing entry
{
entry.Quantity += itemToAdd.Quantity; // amongst other things
}
else // create a new entry
{
entry = Mapper.Map<ItemDto, Item>(itemToAdd);
}
Save(entry);
} while (pendingEntries.MoveNext());
The key is the Enumerable.DefaultIfEmpty() call — this will return a sequence with a
default (Item)item if the sequence is empty. This will benullfor a reference type.Edit: fixed bug mentioned by neotapir.