"Хотя бы один объект должен реализовать IComparable" для INT? Насколько я знаю, это
хорошо, у меня есть простой IEnumerable<HtmlString> things
и я хочу разделить ее на четыре равные группы.
var quarter = things.Count() / 4;
следует сделать трюк, но вместо этого я получаю эту напуганность:
ошибка сервера в приложении"/". По крайней мере один объект должен реализовывать Интерфейс icomparable. Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и где она возникла в код.
Сведения Об Исключении: System.ArgumentException: по крайней мере один объект должен реализовать IComparable.
строка 36: int quarter = вещи.Count () / 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()