private int InnerAddOrReplace(Type key, Delegate value, Func <Type, Delegate> valueCreator) { var previousIndex = -1; var currentIndex = headIndex; while (currentIndex != -1) { var current = items[currentIndex]; if (IsMatch(current.Key, key)) { if (current.Key == key) { items[currentIndex] = current.With(value: value); return(currentIndex); } break; } previousIndex = currentIndex; currentIndex = current.NextElementIndex; } var newItem = new SwapListItem(key, value, valueCreator, items.Count); if (previousIndex == -1) { newItem.NextElementIndex = headIndex; headIndex = newItem.Id; } else { newItem.NextElementIndex = items[previousIndex].NextElementIndex; items[previousIndex] = items[previousIndex].With(nextElementIndex: newItem.Id); } items.Add(newItem); return(newItem.Id); }
private int InnerAddOrReplace(Type key, Delegate value, Func<Type, Delegate> valueCreator) { var previousIndex = -1; var currentIndex = headIndex; while(currentIndex != -1) { var current = items[currentIndex]; if(IsMatch(current.Key, key)) { if(current.Key == key) { items[currentIndex] = current.With(value: value); return currentIndex; } break; } previousIndex = currentIndex; currentIndex = current.NextElementIndex; } var newItem = new SwapListItem(key, value, valueCreator, items.Count); if(previousIndex == -1) { newItem.NextElementIndex = headIndex; headIndex = newItem.Id; } else { newItem.NextElementIndex = items[previousIndex].NextElementIndex; items[previousIndex] = items[previousIndex].With(nextElementIndex: newItem.Id); } items.Add(newItem); return newItem.Id; }