Если ваша коллекция уже отсортирована, выполните двоичный поиск по ней, чтобы выяснить, куда следует вставить новый элемент, а затем вызовите Insert
.Добавление элемента в конец и последующее обращение ко всей коллекции будет очень расточительным.
Жаль, что нет общего метода BinarySearch
для расширения IList<T>
, но это не должно бытьслишком сложно писать.Предполагая, что вы захотите написать общий метод для этого (что я бы посоветовал вам сделать - это не будет значительно сложнее, чем написание InfoItem
-конкретного), вы бы либо захотеливзять проекцию IComparer<T>
или , например
public static int BinarySearch<T>(this IList<T> source, IComparer<T> comparer)
или
public static int BinarySearch<TSource, TKey>(
this IList<TSource> source,
Func<TSource, TKey> keySelector)
Я предлагаю вам сделать возвращаемое значение в соответствии с соглашением List<T>.BinarySearch
, так что если совпадение не найдено, оно возвращает побитовое отрицание индекса, в который элемент будет вставлен.