"Хотя бы один объект должен реализовать IComparable" для INT? Насколько мне известно, так оно и есть.
Хорошо, у меня есть простой IEnumerable<HtmlString> things
, и я хочу разделить его на четыре равные группы.
var quarter = things.Count() / 4;
Должен сделать трюк, но вместо этого я получаю эту фанкность:
Ошибка сервера в приложении'/'. По крайней мере один объект должен реализовать Интерфейс icomparable. Описание: необработанное исключение произошло во время выполнение текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в код.
Исключение Детали: Система.ArgumentException: по крайней мере один объект должен реализовать IComparable.
Строка 36: int quarter = вещи.Граф() / 4;
Кто-нибудь знает, какого черта здесь происходит? Зачем мне нужно реализовать IComparable, чтобы получить простой счетчик?
1 ответ:
Я предполагаю, что это связано с ленивой оценкой LINQ'S
OrderBy
. Например, если у вас есть:var things = unsortedThings.OrderBy(foo => foo.Bar); var quarter = things.Count() / 4;
Тогда, если свойства
foo.Bar
не могут быть сопоставлены друг с другом, это вызовет именно это исключение.Например:
using System; using System.Linq; class Foo {} class Program { public static void Main() { var foos = new[] { new Foo(), new Foo() }; var ordered = foos.OrderBy(x => x); Console.WriteLine(ordered.Count()); } }
Вывод:
Unhandled Exception: System.ArgumentException: At least one object must implement IComparable. at System.Collections.Comparer.Compare(Object a, Object b) at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2) at System.Linq.EnumerableSorter`1.QuickSort(Int32[] map, Int32 left, Int32 right) at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) at Program.Main()