«Я могу сортировать его в новый список, используя» нет, это не тот случай, OrderBy
оленья кожа возвращает список, вы должны вызвать ToList
, чтобы создать новый список. На ваш вопрос, как использовать List.Sort
с IList<T>
вместо List<T>
?
Вы можете написать метод расширения для IList<T>
:
public static IList<T> Sort<T>(this IEnumerable<T> sequence, IComparer<T> comparer = null)
{
var seqList = sequence as List<T>;
if (seqList != null)
{
seqList.Sort((IComparer<T>)comparer);
return seqList;
}
var seqArray = sequence as T[];
if (seqArray != null)
{
Array.Sort(seqArray, (IComparer<T>)comparer);
return seqArray;
}
return sequence.OrderBy(t => t, (IComparer<T>)comparer).ToList();
}
Теперь вы можете использовать Sort
на списки, массивы или любой другой вид последовательности:
IList<string> strings = new[] { "B", "A", "C" };
strings.Sort();
Update: если вы просто хотите один для массивов или списков, которые вы можете использовать:
public static void Sort<T>(this IList<T> sequence, IComparer<T> comparer = null)
{
var seqList = sequence as List<T>;
if (seqList != null)
{
seqList.Sort((IComparer<T>)comparer);
return;
}
var seqArray = sequence as T[];
if (seqArray != null)
{
Array.Sort(seqArray, (IComparer<T>)comparer);
}
}
Почему вы хотите это сделать? Какая ситуация у вас в этом 'unsortedIList = unsortedIList.OrderBy (x => x.SortingValue);' не решит? –
_ «Я могу сортировать его в новом списке, используя« _ no », это не тот случай,' OrderBy' не возвращает список, вы должны вызвать 'ToList' для создания нового списка. Возникает вопрос, как использовать 'List.Sort' с' IList 'вместо' List '? –
Вам нужно будет создать метод 'Sort' и использовать его. Возьмите один из тех, что используются Mono, например. – xanatos