Antmicro.Migrant.Utilities.SwapList.InnerAddOrReplace C# (CSharp) Метод

InnerAddOrReplace() приватный Метод

private InnerAddOrReplace ( Type key, Delegate value, Delegate>.Func valueCreator ) : int
key System.Type
value System.Delegate
valueCreator Delegate>.Func
Результат int
        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;
        }