Я понимаю, что это старый пост, но мне недавно было нужно что-то похожее, и я подумал, что эта реализация может помочь, если кто-то захочет добавить общую последовательность, которая поддерживает добавление элементов порядка (а также позволяет вставлять до и после любой данный пункт). Я уверен, что у кого-то есть более эффективные способы сделать это, но это помогает.
public class Sequence<T> : ICollection<T>
{
private readonly SortedList<long, T> _baseList;
public Sequence()
{
this._baseList = new SortedList<long, T>();
}
public IEnumerator<T> GetEnumerator()
{
return this._baseList.Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
public void Add(T item)
{
this._baseList.Add(this._baseList.Count(), item);
}
public void AddAfter(T item, T newItem)
{
var currentIndex = this._baseList.IndexOfValue(item);
if (currentIndex == _baseList.Count())
{
this.Add(newItem);
}
else
{
var itemsToMove = new SortedList<long, T>();
var total = Count;
for (var i = currentIndex + 1; i < total; i++)
{
itemsToMove.Add(i, _baseList[i]);
_baseList.Remove(i);
}
this.Add(newItem);
foreach (var itemToMove in itemsToMove)
{
this.Add(itemToMove.Value);
}
}
}
public void AddBefore(T item, T newItem)
{
var currentIndex = this._baseList.IndexOfValue(item);
var itemsToMove = new SortedList<long, T>();
var total = Count;
for (var i = currentIndex; i < total; i++)
{
itemsToMove.Add(i, this._baseList[i]);
_baseList.Remove(i);
}
this.Add(newItem);
foreach (var itemToMove in itemsToMove.Values)
{
this.Add(itemToMove);
}
}
public void Clear()
{
this._baseList.Clear();
}
public bool Contains(T item)
{
return this._baseList.ContainsValue(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
this._baseList.Values.CopyTo(array, arrayIndex);
}
public bool Remove(T item)
{
try
{
this._baseList.RemoveAt(this._baseList.IndexOfValue(item));
return true;
}
catch
{
return false;
}
}
public int Count
{
get
{
return this._baseList.Count();
}
}
public bool IsReadOnly
{
get
{
return false;
}
}
}