public static BinaryInsertResult <T> BinaryInsert <T>(this IList <T> list, T value, int index = 0, int length = int.MaxValue, IComparer <T> comparer = null, BinaryInsertStrategy insertStrategy = BinaryInsertStrategy.DoNothingIfFound) { return(BinaryInsert(list, value, k => k, index, length, comparer, insertStrategy)); }
public static BinaryInsertResult <T> BinaryInsert <T, TKey>(this IList <T> list, T item, Func <T, TKey> keySelector, int index = 0, int length = int.MaxValue, IComparer <TKey> comparer = null, BinaryInsertStrategy insertStrategy = BinaryInsertStrategy.DoNothingIfFound) { index = BinarySearch(list, keySelector(item), keySelector, index, length, comparer); if (index > -1) { switch (insertStrategy) { case BinaryInsertStrategy.DoNothingIfFound: return(new BinaryInsertResult <T>(list, item, index, false)); case BinaryInsertStrategy.InsertAfter: index++; break; case BinaryInsertStrategy.Replace: list[index] = item; return(new BinaryInsertResult <T>(list, item, index, true)); } } else { index = ~index; } list.Insert(index, item); return(new BinaryInsertResult <T>(list, item, index, true)); }